2011-12-19 79 views
4

文字列をintにハッシュするために、C++でハッシュ関数を探しています。私はCMapStringToPtrを使用しましたが、 "GetNextAssoc"という関数があり、キーを文字列として取り出すことができます。つまり、文字列を格納しなければならず、メモリが大量になります。 メモリが少なくなり、文字列を格納しない他のハッシュ関数はありますか?ハッシュ関数をC++で文字列をintに変換する

+7

'std :: hash ()()'を試してください。 –

+1

私はあなたの質問を理解するか分からない。ハッシュ関数を使用するほぼすべての場所で、ハッシュ関数にはすべて衝突があり、ハッシュに基づくルックアップには元のデータが必要であるため、元のデータを追跡する必要があります。それらが発生します。 – Omnifarious

+0

はい、私はメモリ使用量のために元のデータを保持する必要はありません..また、私は衝突を解決したくない、実際に私の目標は衝突を維持することです! – Bipario

答えて

9

C++には、この目的のために組み込まれたハッシュ関数があります。これは、すべてのSTLハッシュコンテナで使用されます。

std::hash

PS:あなたは、いくつかの値でMOD、ちょうど整数に追加し、その文字を通じてconst参照し、サイクルによって一つ一つの文字列を渡し、あまりにも自分自身を作ることができます:)

+0

私は間違っているかもしれませんが、あなたのリンクはSGI拡張(SGI で定義されています)を指し、C++ 11より前のC++標準の一部ではありませんでした(で定義されています)。 –

+0

半分と私は言うだろう。私はそれが拡張だと信じていますが、それがあなたのシステムになければ私は非常に驚くでしょう - それはほとんどどこにでもあります。 –

+0

modによって何か価値があるとお考えですか? – dustinyourface

2
int hash(const string &key, int tableSize) { 
    int hashVal = 0; 

    for(int i = 0; i<key.length(); i++) 
    hashVal = 37*hashVal+key[i]; 

    hashVal %= tableSize; 

    if(hashVal<0) 
    hashVal += tableSize; 

    return hashVal; 
} 
関連する問題