2011-12-13 91 views
0

在unordered_map中確實沒有保證順序嗎?我問這是因爲我想指定一個unorderded_map的訂單,以便可以按照指定的順序(從全局來說,保留對單個元素的散列訪問的效率)從begin()end()迭代容器。是否可以指定unordered_map的順序?

+17

明顯地命名'unordered_map`類型不足以獲得消息... – Jon 2011-12-13 23:20:14

+2

調查[Boost.MultiIndex](http://www.boost.org/doc/libs/1_48_0/libs/multi_index/ DOC/index.html中)。我並不熟悉它足以告訴你一個例子,但我很確定你的問題的解決方案是否在任何地方,它就在那裏。 – 2011-12-13 23:27:15

回答

8

你知道,它有它的名字是有原因的......

要真正給它一個訂單,你需要實現自己的哈希,不知怎的,讓你的通緝令。現在

,用於解決您的實際問題,你可以從你的std::unordered_map創建std::map,甚至以最小的開銷用於插入(無份):

#include <iostream> 
#include <unordered_map> 
#include <map> 
#include <functional> 

int main() 
{ 
    std::unordered_map<int, int> m; 
    m[5] = 1; 
    m[4] = 2; 
    m[3] = 3; 
    m[2] = 4; 
    m[1] = 5; 
    typedef std::reference_wrapper<const int> cref_int; 
    typedef std::reference_wrapper<int> ref_int; 
    std::map<cref_int, ref_int> ordered(m.begin(), m.end()); 
    for(auto it=ordered.begin(), ite=ordered.end(); it != ite; ++it){ 
     std::cout << it->second << '\n'; 
    } 
} 
5

當然不是。如果您需要訂單,請使用常規地圖。

相關問題