通过地图矢量迭代

时间:2018-05-08 06:56:14

标签: c++ vector hashmap iteration

我是学习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循环似乎没有打印任何东西,我已将值推入地图。请指教。

3 个答案:

答案 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;
}

这将根据您的需要运作。每当您遍历矢量时,您将只获得地图的当前值。我希望这会对你有所帮助。