2016-03-03 71 views
-2

我想同時循環兩張地圖,我怎麼能做到這一點?在C++中迭代兩張地圖

我有兩個向量要打印兩個,我可以做兩個時間(auto it : mymap)在一個內?例如:

for (auto it: mymap && auto on: secondMap) 

這甚至允許嗎?

我試圖打印像(value1, value2)這樣的值,其中每個值都位於不同的映射中。地圖不一定包含完全相同的項目,但關鍵是一個指令,並且該值是一個整數,所以如果我在地圖中有一個元素value2,則不一定對應於相同的密鑰有一個value1,但在這種情況下它應該是0,這是默認的整數值。

任何想法?

也許有可能結合兩個迭代器,每個映射一個?

親切的問候, 希丁克Leijsten

+0

您可以嵌套兩個循環並獲得相同的效果 – TankorSmash

+0

不,該語法無效。你對你想要做什麼的描述很複雜,涉及到一堆與解決你的問題無關的信息。讓你的問題更簡潔。 –

+1

[Go XY在這裏。](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)當你有兩個或更多的'vector's需要對齊,請考慮使用一個「矢量」和捆綁數據的數據結構。在代碼中,更喜歡'struct wrapper {int a; int b;};矢量'over'矢量 a;向量 b;'解決a和b保持同步的所有問題,只需要一個迭代器。 – user4581301

回答

0

您可以使用常規的for循環此:

#include <iostream> 
#include <map> 


int main(int argc, char* argv[]) { 
    std::map<int, std::string> m1, m2; 

    m1.insert({15, "lala"}); 
    m1.insert({10, "hey!"}); 
    m1.insert({99, "this"}); 

    m2.insert({50, "foo"}); 
    m2.insert({51, "bar"}); 


    for(auto it_m1 = m1.cbegin(), end_m1 = m1.cend(), 
     it_m2 = m2.cbegin(), end_m2 = m2.cend(); 
     it_m1 != end_m1 || it_m2 != end_m2;) 
    { 
     if(it_m1 != end_m1) { 
      std::cout << "m1: " << it_m1->first << " " << it_m1->second << " | "; 
      ++it_m1; 
     } 

     if(it_m2 != end_m2) { 
      std::cout << "m2: " << it_m2->first << " " << it_m2->second << std::endl; 
      ++it_m2; 
     } 
    } 

    return EXIT_SUCCESS; 
} 

需要注意的是,因爲你要遍歷不同大小的地圖,你必須使用||運算符處於循環條件。直接的後果是你不能在for循環的最後部分遞增,因爲當時一個迭代器可能是無效的(並導致分段錯誤)。 您必須檢查循環內的迭代器有效性,並在有效時遞增它,如上面的示例所示。

+0

感謝您的回答。這很清楚,只需要小心it_m1和it_m2是否指向相同的指令。這將爲我解決。再一次感謝 – Guus

+0

不客氣。請接受我的回答,以便解決此問題。 – dutiona