如何使用单 for 循环遍历 std::map<string>int 和 std::vector<int>?

How to iterate through a std::map<string,int> and std::vector<int> using single for loop?

本文关键字:std lt gt int vector string map 何使用 for 循环 遍历      更新时间:2023-10-16

如何使用单个for循环迭代std::map<string,int>std::vector<int>

我看到了这些问题,但无法解决我的问题。

我试着像这个

map<string,int> data;
data["Shravan"] = 1;
data["Mama"] = 2;
data["Sa1"] = 3;
data["Jhandu"] = 4;
vector<int> values = {1,2,3,4};
for(const auto& it1: data,it2 : values) {
// Do something 
}

编辑:我无法逐一浏览。因为我在同一个函数中使用std::map的键和std::vector的值。它将在for循环中调用。

两个容器大小相同。

如果您知道两者的长度相同,请使用以下内容:

auto vit = begin(value);
auto mit = begin(data);
for (; vit != end(value); ++mit, ++vit) {
// Use mit and vit
}

来一段时间怎么样?前提是你的集装箱不是空的。

auto iv = std::begin(value);
auto id = std::begin(data);
do {
// Use those iterators
} while(++iv != std::end(value) && ++id != std::end(data))

如果您也想处理空容器,也可以使用while

auto iv = std::begin(value);
auto id = std::begin(data);
while(iv != std::end(value) && id != std::end(data)) {
// Use those iterators
iv++; id++;
}

考虑本答案中讨论的boost::zip_iteratorhttps://stackoverflow.com/a/8513803/2210478

您可以对mapvector进行迭代,并确保根据相应容器的末尾检查迭代器。

auto map_iter = data.begin();
auto vec_iter = value.begin();
for (; map_iter != data.end() && vec_iter != value.end();
++map_iter, ++vec_iter) {
// Use map_iter and vec_iter
}