如何遍历地图向量



我编码是为了好玩。我创建了一个映射向量,看看我可以用容器做什么。当我遍历向量时,只有阿尔弗雷德安吉拉出现。如何显示所有名称?甚至可能吗?这是我到目前为止所拥有的:

#include <map>
#include <iostream>
#include <conio.h>
#include <vector>
#include <string>
int main()
{
//create a map
std::map<std::string, unsigned int> mySuperCoolMap;
mySuperCoolMap["Edward"] = 39;
mySuperCoolMap["Daniel"] = 35;
mySuperCoolMap["Carlos"] = 67;
mySuperCoolMap["Bobby"]  =  8;
mySuperCoolMap["Alfred"] = 23;
std::cout << "nn";
//Ranged based for loop to display the names and age
for (auto itr : mySuperCoolMap)
{
std::cout << itr.first << " is: " << itr.second << " years old.n";
}
//create another map
std::map<std::string, unsigned int> myOtherSuperCoolMap;
myOtherSuperCoolMap["Espana"]  =  395;
myOtherSuperCoolMap["Dominic"] = 1000;
myOtherSuperCoolMap["Chalas"]  =  167;
myOtherSuperCoolMap["Brian"]   =  238;
myOtherSuperCoolMap["Angela"]  = 2300;
//Display the names and age
for (auto itr : myOtherSuperCoolMap)
{
std::cout << itr.first << " is: " << itr.second << " years old.n";
}
//create a vector of maps
std::vector<std::map<std::string, unsigned int>> myVectorOfMaps;
myVectorOfMaps.push_back(mySuperCoolMap);
myVectorOfMaps.push_back(myOtherSuperCoolMap);
std::cout << "nn";
//Display the values in the vector
for (auto itr : myVectorOfMaps)
{
std::cout << itr.begin()->first << " is: " << itr.begin()->second << " years old.n";
}
_getch();
return 0;
}

您需要使用嵌套循环。如果您正在学习新概念,使用调试器和打印itr可能会给您这种直觉。

//Display the values in the vector
for (const auto &vec : myVectorOfMaps)
{
for (const auto &p : vec)
{
std::cout << p.first << " is: " << p.second << " years old.n";
}
}

演示

您要求仅打印第一个元素,这就是为什么您只获得第一个元素的原因。请注意,这是一个错误,因为您正在访问 map 的第一个元素,而不确定 map 是否为非空。


请注意,<conio.h>不是标准标头,可能不适用于标准平台

你在 for 循环中获得的对象是一个std::map。因此,您需要使用另一个 for 循环来遍历每个映射中的所有条目。

最新更新