我需要合併兩個unordered_map
s而不更改順序。 例如,如何在不改變元素順序的情況下合併兩個unordered_maps?
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並插入,但沒有按照上面的要求工作。有人可以幫助我做到這一點。或者我在合併和插入時犯了一些錯誤?
所以你的意思是說,無序地圖會在插入時對鍵進行某種排序? – kayle
不,實際上'std :: unordered_map'是一個[哈希表](https://en.wikipedia.org/wiki/Hash_table)。我不確定標準是如何明確地指定它的,但它肯定走得像一個散列表,像一個散列表一樣嘎嘎嘎嘎。它可能會按散列順序迭代(並且在同一個散列桶中按照插入的順序),但這當然不能保證。所以當你從'begin'迭代到'end'時,你可以依靠所有的元素,但這就是它。 – alcedine