VS2010C++のインデックスに最大3,000,000個のdouble
値を格納したいと思います。unsigned int
私はstd::tr1:unordered_map<unsigned int, double>
この目的のためにを使用します。残念ながら、値番号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)に進みます。そこでは永久に保持されます(100%のCPU負荷で、メモリは増加しません)。
2)を実行するrehash(1000)
と、i == 65000
(2 ^ 16)になり、永久に保持されます(CPU負荷は100%、メモリは増加しません)。
3)を実行するrehash(3000000)
と、ループは正常に終了しますが、プログラムは終了しません。つまり、明らかにデストラクタに問題があります。
そこで何が起こっているのか、そしてさらに重要なのは、それについて何をすべきかということです。
助けてくれて本当にありがとうございます!