我是学习c ++的新手,我在尝试迭代代码时遇到了麻烦。
vector<map<string, char>> skills;
map<string, char> frontFloat;
map<string, char> frontGlide;
skills.push_back(frontFloat);
skills.push_back(frontGlide);
frontFloat["Wetface"]='C';
frontFloat["relaxed"]='C';
frontFloat["comfortable"]='I';
// ...
for (auto x : skills) {
for (auto it=x.begin(); it!=x.end(); ++it){
cout<< it->first << " => " << it->second << '\n';
}
}
我试图遍历vector
并进一步遍历向量中的每个map
。
我的for
循环似乎没有打印任何东西,我已将值推入地图。请指教。
答案 0 :(得分:1)
skills.push_back(frontFloat);
// ...
frontFloat["Wetface"]='C';
您设置map
的{{1}}与WetFace
内的不是同一个。您在vector
。
frontFloat
的副本
因此,当您对vector
内的map
进行交互时,它与您设置元素的vector
不同。
要添加到map
内的地图,请执行类似
vector
答案 1 :(得分:1)
除了BoBTFish的答案之外,还可以使用矢量元素的索引来操纵它们。
vector<map<string, char>> skills;
map<string, char> frontFloat;
map<string, char> frontGlide;
skills.push_back(frontFloat);
skills.push_back(frontGlide);
skills[0]["Wetface"]='C';
skills[0]["relaxed"]='C';
skills[0]["comfortable"]='I';
for (auto& x : skills) {
for (auto& skillPair : x){
cout<< skillPair.first << " => " << skillPair.second << '\n';
}
}
答案 2 :(得分:0)
skills.push_back(frontFloat);
skills.push_back(frontGlide); //this will actually be stored as value not as reference. so the vector will contain only values from map at the pushing into the vector. But in your case you can push that as reference.
下面的代码用指针引用稍微修改你的代码。
vector<map<string, char>*> skills; //here I'm storing the address of the map not the value.
map<string, char> frontFloat;
map<string, char> frontGlide;
skills.push_back(&frontFloat); //here i'm pushing the address to the vector.
skills.push_back(&frontGlide);
frontFloat["Wetface"]='C';
frontFloat["relaxed"]='C';
frontFloat["comfortable"]='I';
// ...
for (auto x : skills) {
for (auto it=(*x).begin(); it!=(*x).end(); ++it){ //(*x) dereferencing the map address to the value.
cout<< it->first << " => " << it->second << '\n';
}
}
return 0;
}
这将根据您的需要运作。每当您遍历矢量时,您将只获得地图的当前值。我希望这会对你有所帮助。