unordered_map中确实没有保证订单吗?我问这个是因为我想指定一个unorderded_map
的订单,这样就可以根据指定的顺序将容器从begin()
迭代到end()
(同时保持效率)在全球范围内,对单个元素进行哈希访问)。
答案 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)
当然不是。如果您需要订单,请使用常规地图。