是否可以为unordered_map指定订单?

Mar*_*tin 0 c++

unordered_map中确实没有保证订单吗?请问这是因为我想为一个指定的顺序unorderded_map,使得它可以从迭代容器begin()end()根据指定的顺序(同时保留的散列访问单个元件的效率,在全球范围而言).

Xeo*_*Xeo 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';
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 单独的哈希算法对你没有帮助,因为你不知道容器实际上用哈希值做什么*.标准库的要求是返回一个"size_t"的散列函数,但是映射通常会将其切换为与桶数相对应的内容. (2认同)

flo*_*wnt 5

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