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

时间:2016-02-10 05:58:12

标签: c++ dictionary merge stl unordered-map

我需要合并两个unordered_map而不更改顺序。 例如,

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

map1包含:&lt; 4,4&gt; &LT; 2,2&GT;

map2包含:&lt; 3,3&gt; &LT; 1,1 GT;

map1和map2将与map3合并。

所以我的map3应该包含&lt; 4,4&gt;&lt; 2,2&gt;&lt; 3,3&gt;&lt; 1,1&gt;

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

仍然是map3订单正在改变。 我试过std :: merge和insert,但没有按照上面的要求工作。有人可以帮我这个。或者我在合并和插入时犯了一些错误?

3 个答案:

答案 0 :(得分:5)

<ListView ItemsSource="{Binding NameOfObservableCollectionProperty}"....> <ListView.View> <GridView> <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" /> </GridView> </ListView.View> </ListView> 并不保证任何类型的订单,而std::unordered_map始终按键排序(尽管您可以指定自己的比较函数)。看起来您想要按照插入顺序排列项目。在这种情况下,您可以将数据推送到std::map,但您必须放弃映射类型提供的子线性操作。

答案 1 :(得分:0)

地图元素的顺序依赖于其键和平衡树算法,但不依赖于源地图元素顺序。如果您想保存订单,请使用std::vector<std::pair<inr,int>>

答案 2 :(得分:0)

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