我有一个boost :: unordered_map,但它似乎是按顺序的,给我一种压倒性的感觉:“你做错了”。为什么按顺序输出?我会一直期待的底层散列算法已经随机顺序如下:boost :: unordered_map是...命令?
#include <iostream>
#include <boost/unordered_map.hpp>
int main()
{
boost::unordered_map<int, int> im;
for(int i = 0; i < 50; ++i)
{
im.insert(std::make_pair(i, i));
}
boost::unordered_map<int, int>::const_iterator i;
for(i = im.begin(); i != im.end(); ++i)
{
std::cout << i->first << ", " << i->second << std::endl;
}
return 0;
}
......给我......
0, 0
1, 1
2, 2
...
47, 47
48, 48
49, 49
的后提升的源代码检查:
inline std::size_t hash_value(int v)
{
return static_cast<std::size_t>(v);
}
......这将解释它。下面的答案也支持更高层次的思考,我觉得这很有用。
而不是插入'我',尝试插入(并在插入时同时打印到控制台,同时插入)随机数,看看结果是否仍然有序,或者他们只是按他们插入的顺序排序.. 。 – FrustratedWithFormsDesigner 2010-06-14 18:32:52
如果您需要随机订购,请使用std :: random_shuffle :) – Drakosha 2010-06-14 18:36:10
@Drakosha:我不是在寻找随机订单,但按顺序unordered_map让我感到不安。 (非最小测试用例有几千个整数,但它们仍然是有序的) – Thanatos 2010-06-14 18:38:53