私は、常に非常に効率的である必要がある低遅延アプリケーションに取り組んでいます。
文字列に基づいてインデックスを検索する必要があるため、c++ unordered_map を使用しています。制約: -挿入と検索のみ、削除なし -キーは文字列、値は int -unordered_map に追加されるエントリは 100 万を超えないことを期待
unordered_map の予約を 100 万に設定しています。これは良いことですか、それとも、再ハッシュを避けるために予想されるエントリよりも数 % 多めに予約する必要がありますか? 100 万に設定できますか、それとも 100 万または 2 乗に近い大きな素数に設定する必要がありますか。
私は、たまたまmurmur2であるc ++ std libでデフォルトの文字列ハッシュ関数を使用しています。私のキーは 25 から 50 文字で、すべて数字、大文字の英語のアルファベット、および _ 文字を含む一意のキーです。このハッシュ関数は、キーを均等に配布するのに十分でしょうか?それとも unordered_map により良いハッシュ関数を提供する必要がありますか?
unordered_map は、100 万個のキー、値のペア、およびサイズ 100 万の配列に領域を割り当てますか?
挿入時にヒープにキーと値のペアを動的に割り当てると、どの程度のドラッグになりますか? 特に、これは多くのエントリを持つ大きなハッシュ テーブルであるためです。
パフォーマンス上の理由から、スタック上または初期化中に 100 万エントリに事前に割り当てられたメモリを使用して、独自のハッシュ テーブルを実装することをお勧めしますか、または上記の unordered_map の最適化は十分に近いですか?
挿入時の動的割り当てを回避するために、事前に unorderd_map の予想されるエントリ数に対してメモリを割り当てる方法はありますか?