繁体   English   中英

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

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

如何使用单个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_iterator https://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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM