Подтвердить что ты не робот

С++ Loop через карту

Я хочу перебирать каждый элемент в map<string, int>, не зная ни одного из его значений или ключей строки.

Что я до сих пор:

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?  
       }
}
4b9b3361

Ответ 1

Это можно сделать следующим образом:

map<string, int>::iterator it;

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

С С++ 11 (и далее),

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

С С++ 17 (и далее),

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

Ответ 2

Попробуйте выполнить

for ( const auto &p : table )
{
   std::cout << p.first << '\t' << p.second << std::endl;
} 

То же самое можно записать, используя обычный для цикла

for ( auto it = table.begin(); it != table.end(); ++it  )
{
   std::cout << it->first << '\t' << it->second << std::endl;
} 

Учтите, что value_type для std::map определяется следующим образом:

typedef pair<const Key, T> value_type

Таким образом, в моем примере p является константой ссылки на value_type, где Key std::string, а T - int

Также было бы лучше, если бы функция была объявлена ​​как

void output( const map<string, int> &table );

Ответ 3

value_type map - это pair, содержащий ключ и значение как член first и second, соответственно.

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

Или с С++ 11, используя диапазон для:

for (auto const& p : symbolTable)
{
    std::cout << p.first << ' ' << p.second << '\n';
}