2017-07-05 1 views
-4

私は比較的小さい素数にアルファベット文字をハッシュすることに興味があります。たとえば、a->2,b->3, c->5, d->7, ...です。以来、私は複数の文字のハッシュを乗算/分割しています。C++で比較的小さな素数に1つのcharをハッシュする方法はありますか?

私はstd::hashを試しましたが、非常に大きな整数にハッシュされ、乗算/除算するとオーバーフローが発生しますが、これを行う簡単な方法はありますか?

私は考えていますが、エラトステネスの篩を使って素数の最初の束を生成し、次にstd::unordered_mapを使用してchar,intのペアを格納します。 しかし、私のニーズに合った標準ライブラリに用意されているハッシュ関数はありますか?

+0

はい、 'std :: map ' –

+0

@Kyle Khalafあなたが何を意味するか分かりません。どのように '' std :: map''をハッシュ関数として使うのですか? – AspiringMat

+0

私の主な問題は、実際に対応する鍵を生成していることです。各値は、1)比較的小さく、2)プライムでなければなりません。 – AspiringMat

答えて

6

私はちょうどprimesと呼ばれるstd::vectorの最初の26個の素数を格納し、あなたが文字cを持っている場合、その後、単にprimes[c-'a']を使用して正しいプライムにアクセスします。

+0

私は理解しています。私は実際にハッシュ関数全体を実装するのではなく、小さな素数に自動的にハッシュする標準ライブラリにハッシュ関数があるかどうかを尋ねています。 – AspiringMat

+2

@AspiringMat:いいえ、ハッシュ関数とは異なります。そして、おそらくRNGsを除いて、素数を扱うC++標準ライブラリの何も知らない。 –

+0

@MooingDuckありがとう、それは基本的に私の質問だった。私は文字をプライムに自動的にハッシュする組み込み関数を望んでいたので、私はその質問をします。 – AspiringMat

関連する問題