我有一個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