簡體   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