![](/img/trans.png)
[英]copy std::map<int, vector<int>> to std::map<std:string, vector<int>>
[英]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
您可以遍历map
和vector
,并确保对照相应容器的末端检查迭代器。
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.