如何在不改变元素顺序的情况下合并两个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 假设两个已经排序的范围(在您的情况下是两个未排序的映射)实现线性时间性能。由于其实现,使用未排序的映射将不会给出所需的结果。
我需要在不改变顺序的情况下合并两个 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 假设两个已经排序的范围(在您的情况下是两个未排序的映射)实现线性时间性能。由于其实现,使用未排序的映射将不会给出所需的结果。