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

时间:2017-02-10 07:48:37

标签: c++ c++11 for-loop vector stdmap

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

我见过this questions但无法解决我的问题。

我正在尝试这样

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循环中调用。

同样大小的容器。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

一次做什么?只要您的容器不是空的。

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++;
}

答案 2 :(得分:1)

考虑此回答https://stackoverflow.com/a/8513803/2210478

中讨论的boost::zip_iterator

答案 3 :(得分:1)

您可以迭代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
}