c++ - 如何在不改变元素顺序的情况下合并两个unordered_map?

标签 c++ dictionary merge stl unordered-map

我需要在不改变顺序的情况下合并两个 unordered_map。 例如,

unordered_map<int,int> map1 ,map2, map3;

map1 包含:<4,4> <2,2>

map2 包含:<3,3> <1,1>

map1 和 map2 将与 map3 合并。

所以我的 map3 应该包含 <4,4><2,2><3,3><1,1>

map<int,int>::iterator it   = map3.begin();
std::merge(map1.begin(),map1.end(),map2.begin(),map2.end(),inserter(map3,it));

map3 顺序仍在变化。 我已经尝试使用 std::merge 和 insert,但没有按照上述要求工作。有人可以帮我解决这个问题吗?还是我在合并和插入时犯了一些错误?

最佳答案

std::unordered_map 不保证任何类型的顺序,而 std::map 始终按键排序(尽管您可以指定自己的比较功能)。看起来您想要按插入顺序排列的项目。在这种情况下,您可以将数据推送到 std::vector,尽管您将不得不放弃映射类型提供的次线性操作。

关于c++ - 如何在不改变元素顺序的情况下合并两个unordered_map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35307907/

相关文章:

c++ - Dlib 将自训练检测器应用于视频 (mmod_dnn)

c++ - Qt QJsonDocument::fromBinaryData() 不起作用

c++ - 如果 PUB 首先启动并连接到 XPUB/XSUB 代理,消息将被丢弃,直到 SUB 未连接

c# - 如何在 C# 中将字典转换为 JSON 字符串?

Java 按字符串查找和比较成员(也许是 JPA 功能?)

c++ - 合并没有空格的文件比有空格更快

Java合并多个集合/列表的最有效方法

c++ - 汇编代码与我的 C++ 代码混合在一起。如何移植到 64 位

c# - 根据另一个列表对列表进行排序,然后使用 LINQ 对其自身进行排序

svn - 修复标记版本中的错误(颠覆)