当前位置:  开发笔记 > 编程语言 > 正文

如何合并2个std :: maps,并将结果输出到第3个映射中

如何解决《如何合并2个std::maps,并将结果输出到第3个映射中》经验,为你挑选了1个好方法。

编辑原始问题,因为我想问问题std::map,而不是std::vector.我的错.抱歉.

我的数据实际上是2 std::map秒.我想将两张地图合并到第三张地图中.

我的第一张和第二张地图包含具有相同键的条目.所以我想将这些键下的数据合并到我生成的第3张地图中.

所以如果我使用std::merge,我会丢失第一个或第二个地图常用条目中的数据吗?正如我所提到的,两张地图都有共同的数据(值)?



1> Revolver_Oce..:

顺序容器的信息

如果vectors(或其他顺序容器如listor deque)被排序,那么你可以使用std::set_union.std::merge如果您想保存重复项,则有一个

从链接页面获取的代码:

#include 
#include 
#include 
#include 

int main()
{
    std::vector v1 = {1, 2, 3, 4, 5}; 
    std::vector v2 = {      3, 4, 5, 6, 7}; 
    std::vector dest1;

    std::set_union(v1.begin(), v1.end(),
                   v2.begin(), v2.end(),                  
                   std::back_inserter(dest1));

    for (const auto &i : dest1) {
        std::cout << i << ' ';
    }   
    std::cout << '\n';
}

输出:1 2 3 4 5 6 7

关联容器的信息

您可以使用方法向map(或set它们的无序对应物)添加唯一键insert.任何在原始地图已经存在的键不会被替换(在multisetmultimap重复键将被添加,使用set_union,如果这应该避免讨论过).

映射示例(忽略具有重复键的条目):

#include 
#include 

int main()
{
    std::map v1 = {{1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}};
    std::map v2 = {                {3, 2}, {4, 2}, {5, 2}, {6, 2}, {7, 2}};
    std::map dest1 = v1;

    dest1.insert(v2.begin(), v2.end());

    for (const auto &i : dest1) {
        std::cout << i.first << ':' << i.second << ' ';
    }
    std::cout << '\n';
}

输出(第一个数字是关键,第二个 - 它来自哪个地图):1:1 2:1 3:1 4:1 5:1 6:2 7:2

如果你切换地图(设置dest1v2开头和inser值的副本v1),那么输出将是:1:1 2:1 3:2 4:2 5:2 6:2 7:2

多映射的示例(保留两个映射的条目):

#include 
#include 

int main()
{
    std::map v1 = {{1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}};
    std::map v2 = {                {3, 2}, {4, 2}, {5, 2}, {6, 2}, {7, 2}};
    std::multimap dest1 {v1.begin(), v1.end()};

    dest1.insert(v2.begin(), v2.end());

    for (const auto &i : dest1) {
        std::cout << i.first << ':' << i.second << ' ';
    }
    std::cout << '\n';
}

输出:1:1 2:1 3:1 3:2 4:1 4:2 5:1 5:2 6:2 7:2

请注意,您不能使用multimap与使用地图完全相同的方式.例如,operator[]是不成功的.您将需要使用insert添加条目,并使用lower_boundequal_range成员函数来提取条目.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有