如何std::map在 C++ 中循环遍历?我的地图定义为:
std::map
std::map< std::string, std::map<std::string, std::string> >
例如,上面的容器保存如下数据:
m["name1"]["value1"] = "data1"; m["name1"]["value2"] = "data2"; m["name2"]["value1"] = "data1"; m["name2"]["value2"] = "data2"; m["name3"]["value1"] = "data1"; m["name3"]["value2"] = "data2";
如何遍历此地图并访问各种值?
老问题,但其余答案自 C++11 起已过时 - 您可以使用基于范围的 for 循环并简单地执行以下操作:
std::map<std::string, std::map<std::string, std::string>> mymap; for(auto const &ent1 : mymap) { // ent1.first is the first key for(auto const &ent2 : ent1.second) { // ent2.first is the second key // ent2.second is the data } }
这应该比早期版本更干净,并避免不必要的副本。
有些人喜欢用引用变量的显式定义替换注释(如果未使用,这些变量会被优化掉):
for(auto const &ent1 : mymap) { auto const &outer_key = ent1.first; auto const &inner_map = ent1.second; for(auto const &ent2 : inner_map) { auto const &inner_key = ent2.first; auto const &inner_value = ent2.second; } }