c – 如何合并2个std :: maps,并将结果输出到第3个映射中
编辑原始问题,因为我想问一下关于std :: map的问题,而不是std :: vector.我的错.抱歉.
我的数据实际上是2 std :: maps.我想将两张地图合并到第三张地图中. 我的第一张和第二张地图包含具有相同键的条目.所以我想将这些键下的数据合并到我生成的第3张地图中. 所以如果我使用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成员函数来提取条目. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |