2011-12-13 67 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

当然不是。如果您需要订单,请使用常规地图。

相关问题