2 つ以上のハッシュテーブルを一緒にマージしたい..繰り返し処理できる限り、最終的な形式が何であるかは問題ではありません。ここで、最終的な形式は配列です。
したがって、キーとして unsigned long long があり、値は string,int のペアです。各キーはビンにマップされ、各ビンは衝突を持つことができます。ハッシュテーブル全体を配列にコピーする代わりに、ビンごとにコピーします。そうすれば、配列全体を反復処理する必要がなくなります。最初に、最初のハッシュテーブルの最初のビンをペアの配列にコピーします。文字列と int をフィールドとして使用します (キーは無視されます)。
何かのようなもの
Class Pair{
char* s;
int frequency;
};
それを配列に追加するには、次のようなものがあります...
Pair pair
pair.s=string of the hashtable value
pair.s=integer of the hashtable value
array[index]=pair;
次に、2 番目のハッシュテーブルの 1 番目のビンを配列にマージするために、最初にハッシュテーブルの値の文字列が既に配列にあるかどうかを確認します。存在する場合は、その文字列に対応するクラス ペアの int 部分を更新します。そうでない場合は、配列に追加します。
次に、次のビンに進みます。最初のハッシュテーブルの 2 番目のビンを配列にコピーします。次に、配列全体を反復処理して、2 番目のハッシュテーブルの 2 番目のビンの何かが配列内にあるかどうかを確認する代わりに、検索を開始します。 2 番目のビンの最初の要素が配列に挿入された配列インデックスから。
問題は、各ビンに1000以上の衝突が含まれる可能性があり、通過するビンが数千あるため、その方法を繰り返すことはまだかなり長いことです.私はそれを避けたい. 各キー (long long) は各文字列で一意であるため、そのキー番号のオフセットを配列内にある場合は 1 に、そうでない場合は 0 に設定することを考えていました。そうすれば、配列内にある場合にのみ配列を反復処理する必要があります。それに関する問題は、長い長いということです。単に大きすぎます。その多くのビットで配列を割り当てることはできません...
別の方法はありますか?