How to create a function with return type map<>?
Solution 1
Either do:
map<string, int> myMap;
initMap( myMap );
void initMap( map<string, int>& theMap )
{
/* do stuff in theMap */
}
or do:
map<string, int> myMap;
myMap = initMap( );
map<string, int> initMap()
{
map<string, int> theMap;
/* do stuff in theMap */
return theMap;
}
i.e. let the function initialise the map you give it, or take the map the function gives you. You're doing both (without a return
statement too!)
I'd go for the first option.
Solution 2
It's probably complaining because you're passing the address of the map, but your function accepts the map by value.
You might want something more like this:
void initMap(map<string, int>& theMap)
{
/* do stuff...*/
}
Solution 3
The canonical solution is just
std::map<std::string, int> initMap();
// ...
std::map<std::string, int> myMap = initMap();
Why the tricky attempt to use an input parameter for a return value? Performance? Modern compilers don't care. In fact, not constructing an empty map will be slightly faster.
Solution 4
You should accept a pointer or preferably a reference to the map. You could also return a reference for convenience:
map<string, int>& initMap( map<string, int>& theMap )
...
// Call initMap
map<string, int> my_map;
initMap(my_map);
Solution 5
why not do void initMap(map& theMap), instead of making so many copies of the map?
IAE
Passionate Programmer. Favored Languages: Kotlin, CoffeeScript, F# Frameworks of Choice: Dropwizard, LoomSDK
Updated on January 09, 2020Comments
-
IAE over 4 years
Fairly straightforward question. I have a map that I wish to initialize by calling a function like so:
map<string, int> myMap;
myMap = initMap( &myMap );
map<string, int> initMap( map<string, int> *theMap ) { /* do stuff... */
However, the compiler is moaning. What's the solution to this?
EDIT 1:
I'm sorry, but I screwed up. The code was correctly written with
*theMap
, but when I posted the question, I failed to notice that I had omitted the*
. So to answer the comment, the error message I get is:1>Roman_Numerals.cpp(21): error C2143: syntax error : missing ';' before '<'
which is thrown at
map<char, int> initMap( map<char, int> *numerals );
using VC++ 2010 Express and the same error again when I define the function.