c++for-loopiteratorstdmaprange-based-loop

How do you loop through a std::map?


I want to iterate through each element in the map<string, int> without knowing any of its string-int values or keys.

What I have so far:

void output(map<string, int> table)
{
       map<string, int>::iterator it;
       for (it = table.begin(); it != table.end(); it++)
       {
            //How do I access each element?  
       }
}

Solution

  • You can achieve this like following :

    map<string, int>::iterator it;
    
    for (it = symbolTable.begin(); it != symbolTable.end(); it++)
    {
        std::cout << it->first    // string (key)
                  << ':'
                  << it->second   // string's value 
                  << std::endl;
    }
    

    With C++11 ( and onwards ),

    for (auto const& x : symbolTable)
    {
        std::cout << x.first  // string (key)
                  << ':' 
                  << x.second // string's value 
                  << std::endl;
    }
    

    With C++17 ( and onwards ),

    for (auto const& [key, val] : symbolTable)
    {
        std::cout << key        // string (key)
                  << ':'  
                  << val        // string's value
                  << std::endl;
    }