是否可以为unordered_map指定订单?

时间:2011-12-13 23:19:06

标签: c++

unordered_map中确实没有保证订单吗?我问这个是因为我想指定一个unorderded_map的订单,这样就可以根据指定的顺序将容器从begin()迭代到end()(同时保持效率)在全球范围内,对单个元素进行哈希访问)。

2 个答案:

答案 0 :(得分:8)

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

要实际给它一个订单,你需要实现自己的哈希,以某种方式为你提供所需的订单。

现在,为了解决您的实际问题,您只需从std::map创建一个std::unordered_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';
    }
}

答案 1 :(得分:5)

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