在c ++中迭代两个映射

时间:2016-03-03 22:35:24

标签: c++ hashmap

我想同时循环浏览两张地图,我怎么能实现这个呢?

我有两个想要打印的矢量,我可以在一个中做两次(auto it : mymap)吗?类似的东西:

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

甚至允许这样做?

我正在尝试打印(value1, value2)之类的值,其中每个值都在不同的地图中。地图不一定包含完全相同的项,但键是一个指令,值是一个整数,所以如果我在地图中有value2的元素,那么不一定有value1对应于相同的键,但在这种情况下,它应该是0,这是默认的整数值。

有什么想法吗?

也许可以组合两个迭代器,每个映射一个?

亲切的问候, Guus Leijsten

1 个答案:

答案 0 :(得分:1)

您可以使用常规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循环的最后部分增加,因为其中一个迭代器在那时可能是无效的(并导致分段错误)。 你必须检查循环内的迭代器有效性,并在它有效时递增它,如上面的例子所示。