我有一个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;
}
Run Code Online (Sandbox Code Playgroud)
...给我...
0, 0
1, 1
2, 2
...
47, 47
48, 48
49, 49
Run Code Online (Sandbox Code Playgroud)
检查boost的源代码:
inline std::size_t hash_value(int v)
{
return static_cast<std::size_t>(v);
}
Run Code Online (Sandbox Code Playgroud)
......这可以解释它.下面的答案也包含了更高层次的思考,我发现它很有用.
换句话说,如果我填充两个unordered_map或者unordered_set具有完全相同内容和相同散列函数的对象,那么迭代它们会给出相同的键/值对序列吗?
如果是这样,那么它的条件是什么(例如相同的散列函数,相同的键,不一定是相同的值).
我在 unordered_map 中存储了一些中间结果。现在当试图输出它时,它显示键是按降序排列的。有没有办法以其他顺序显示它?如何?