How to create a function with return type map<>?

32,398

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?

Share:
32,398
IAE
Author by

IAE

Passionate Programmer. Favored Languages: Kotlin, CoffeeScript, F# Frameworks of Choice: Dropwizard, LoomSDK

Updated on January 09, 2020

Comments

  • IAE
    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.