我想遍历map<string, int>中的每个元素,而不知道它的任何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?
}
}
正如来自莫斯科的@Vlad所说,
考虑std::map的value_type是这样定义的:
typedef pair<const Key, T> value_type
这意味着如果你想用一个更显式的类型说明符替换关键字auto,那么你可以这样;
for ( const pair<const string, int> &p : table ) {
std::cout << p.first << '\t' << p.second << std::endl;
}
只是为了理解这里auto会转化成什么。
正如来自莫斯科的@Vlad所说,
考虑std::map的value_type是这样定义的:
typedef pair<const Key, T> value_type
这意味着如果你想用一个更显式的类型说明符替换关键字auto,那么你可以这样;
for ( const pair<const string, int> &p : table ) {
std::cout << p.first << '\t' << p.second << std::endl;
}
只是为了理解这里auto会转化成什么。
你可以这样做:
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;
}
在c++ 11(及以后)中,
for (auto const& x : symbolTable)
{
std::cout << x.first // string (key)
<< ':'
<< x.second // string's value
<< std::endl;
}
在c++ 17(及以后)中,
for (auto const& [key, val] : symbolTable)
{
std::cout << key // string (key)
<< ':'
<< val // string's value
<< std::endl;
}