![](/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.