我想在 VS2010 C++ 下double
的索引中存储约 3,000,000 个值。unsigned int
我std::tr1:unordered_map<unsigned int, double>
为此目的使用 a 。不幸的是,当我尝试存储值编号 2^21 时,会引发异常(好像只有 2^21-1 的空间,即某些索引只能使用 20 位)。我在存储值之前尝试过rehash
,这也不起作用。
最后我得到了一些非常基本的测试程序(它甚至表现出一些不同的行为,但无论如何):
std::tr1::unordered_map<unsigned int, float> mapOut;
//mapOut.rehash(SOMESIZE);
for (unsigned int i=0; i<3000000; i++)
{
if (i%1000==0) std::cout << i << std::endl;
mapOut[i] = 0.0;
}
我检查的一些案例:
1)如果我根本不重新散列,程序在输出后根据i == 32000
(最终2 ^ 15)休息很长时间,然后继续i == 262000
(2 ^ 18)。它永远存在(CPU 负载为 100%,内存不增加)。
2)如果我做 a rehash(1000)
,它会达到i == 65000
(2^16) 并永远保持(CPU 负载 100%,内存不增加)。
3) 如果我执行 a rehash(3000000)
,则循环成功完成,但程序永远不会退出 - 即,显然析构函数存在问题。
那里发生了什么,甚至更重要的是:我该怎么办?!
非常感谢您的帮助!