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

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

概述编辑原始问题,因为我想问一下关于std :: map的问题,而不是std :: vector.我的错.抱歉. 我的数据实际上是2 std :: maps.我想将两张地图合并到第三张地图中. 我的第一张和第二张地图包含具有相同键的条目.所以我想将这些键下的数据合并到我生成的第3张地图中. 所以如果我使用std :: merge,我会丢失第一个或第二个映射公共条目的数据吗?正如我所提到的,两张地图都有 编辑原始问题,因为我想问一下关于std :: map的问题,而不是std :: vector.我的错.抱歉.

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

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

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

解决方法 顺序容器的信息

如果向量(或列表或双端队列等其他顺序容器)进行排序,则可以使用std::set_union.如果要保存重复项,则为std::merge

从链接页面获取的代码:

#include <vector>#include <iostream>#include <algorithm>#include <iterator>int main(){    std::vector<int> v1 = {1,2,3,4,5};     std::vector<int> v2 = {      3,5,6,7};     std::vector<int> 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

关联容器的信息

您可以使用insert方法向地图(或集合及其无序对应项)添加唯一键.原始地图中已存在的任何密钥都不会被替换(在多重插图和多地图重复键中将添加,如果应该避免,请使用之前讨论过的set_union).

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

#include <map>#include <iostream>int main(){    std::map<int,int> v1 = {{1,1},{2,{3,{4,{5,1}};    std::map<int,int> v2 = {                {3,2},{6,{7,2}};    std::map<int,int> 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

如果您切换地图(将dest1设置为开头的v2副本和v1的inser值),则输出将为:1:1 2:1 3:2 4:2 5:2 6:2 7:2

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

#include <map>#include <iostream>int main(){    std::map<int,2}};    std::multimap<int,int> 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

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

总结

以上是内存溢出为你收集整理的c – 如何合并2个std :: maps,并将结果输出到第3个映射中全部内容,希望文章能够帮你解决c – 如何合并2个std :: maps,并将结果输出到第3个映射中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1232871.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存