如何在不改变元素顺序的情况下合并两个unordered_maps?

How to merge two unordered_maps without changing the order of the elements?

我需要在不改变顺序的情况下合并两个 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 并插入,但没有按照上述要求工作。有人可以帮我解决这个问题吗?还是我在合并和插入时犯了一些错误?

映射元素的顺序取决于其键和平衡树算法,但不取决于源映射元素的顺序。如果您想保存订单,请改用 std::vector<std::pair<inr,int>>

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

std::merge 假设两个已经排序的范围(在您的情况下是两个未排序的映射)实现线性时间性能。由于其实现,使用未排序的映射将不会给出所需的结果。