0

現在、C++ に Boost を使用しており、CRC32 を使用して順序付けされていないマップ (別名ハッシュ テーブル) を実装しようとしています。私の知る限りでは、文字列を初期キーとして取得し、それをハッシュして、バケットの数に収まるように別の操作を適用します。

私の状況では、事前に文字列キーをハッシュし (Boost で別の CRC 関数を使用)、その ID を使用してテーブルのインデックスを作成したいと考えています。私が助けを必要としている問題は、CRC32 ハッシュには 2^32 の潜在的な値があり、2^32 の要素を持つテーブルが必要になるとは思えないことです。この状況で私は何をすべきですか?

ここで助けてくれてありがとう!

4

1 に答える 1

2

モジュラス演算子を使用します -- %C ベースの言語で:

int hashtableIndex = hashValue % hashtableSize;

ただし、C++ では、結果の符号は「実装定義」であり、hashValue が負の場合は負になる可能性があることに注意してください。そのため、操作を行う前に hashValue の符号ビットをオフにしたい場合があり%ます。

また、hashtableSizeが 2 のべき乗であることがわかっている場合は、単純にマスクhashValueしてインデックスを取得できます。

int hashtableIndex = hashValue & (hashtableSize - 1);
于 2011-10-29T18:24:48.013 に答える