我想遍历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?
}
}
试试下面的方法
for ( const auto &p : table )
{
std::cout << p.first << '\t' << p.second << std::endl;
}
同样可以使用普通的for循环来编写
for ( auto it = table.begin(); it != table.end(); ++it )
{
std::cout << it->first << '\t' << it->second << std::endl;
}
请注意std::map的value_type是按以下方式定义的
typedef pair<const Key, T> value_type
因此,在我的例子中,p是对value_type的const引用,其中Key是std::string, T是int
此外,如果将函数声明为将会更好
void output( const map<string, int> &table );
由于P0W为每个c++版本提供了完整的语法,我想通过查看您的代码来添加更多的点
始终采用const & as参数,以避免同一对象的额外副本。
使用unordered_map,因为它总是更快使用。请看这个讨论
下面是一个示例代码:
#include <iostream>
#include <unordered_map>
using namespace std;
void output(const auto& table)
{
for (auto const & [k, v] : table)
{
std::cout << "Key: " << k << " Value: " << v << std::endl;
}
}
int main() {
std::unordered_map<string, int> mydata = {
{"one", 1},
{"two", 2},
{"three", 3}
};
output(mydata);
return 0;
}