2

更新: Visual Studio 2013 を使用する Windows でこの「問題」が発生します。Clang 3.3 と llvm 標準ライブラリのごく最近のバージョンを使用する Linux で同じコードを使用しても、これは発生しません。それでも、これを Microsoft のバグとして書き留める準備はできていません。

使用している unordered_set に奇妙な問題があることに気付きました。load_factor は 1 で、最大サイズは数百万ですが、以下は maximum_bucket_count がわずか 8 であることを示しています。さまざまなタイプのセットでこれを試しました。

誰でもこれを説明できますか?

これは、初期化または構成に依存する数値ではなく、システムまたはライブラリの実装制限であると想定されています。max_bucket_count が max_count (つまり、数百万) と同じである以下のコードの例を見てきました。

std::unordered_set<int> testSet;
std::cout << "max_size = " << testSet.max_size() << std::endl;
std::cout << "max_bucket_count = " << testSet.max_bucket_count() << std::endl;
std::cout << "max_load_factor = " << testSet.max_load_factor() << std::endl;
4

1 に答える 1

0

http://en.cppreference.com/w/cpp/container/unordered_set/bucket_size

bucket_size(bucket index)そのインデックスを持つバケット内の要素の数です。小さいはずです。

bucket_count()バケットの数です。およそ となるはずsize()です。

これは私のコンピューターで起こることです (1000000 個のランダムな整数を挿入した後):

size = 999891
bucket_count = 1056323
maximum bucket_size = 9
max_size = 1152921504606846975
max_bucket_count = 1152921504606846975
max_load_factor = 1

20000000 乱数以降:

size = 19953913
bucket_count = 36473443
maximum bucket_size = 9

バケット数は実際にはサイズよりも多いが、それでもバケットは小さいことがわかります。

于 2014-04-21T09:54:32.343 に答える