私はstd :: stringsの順序のないセットを使用しています。ハッシュ関数を指定するための推奨方法は何ですか?現在、デフォルトを使用しています。私は明示的に実行することができるものを明示的に指定する必要がありますか?unordered_setsで使用するとstd :: stringにハッシュ関数が必要ですか?
0
A
答えて
0
あなた自身で提供する必要はありません。あなたがstd::string
のためにVS 2010のハッシュ関数を使用している場合、あなたはそれがあなたのニーズを満たすかどうかについての自分のために見てみたい場合は<functional>
に含まxfunctional
ヘッダファイルにあります。
template<>
class hash<_STD string>
// ...
1
std::string
するための標準的な分業おそらく一般的に文字列のために(おそらく非常に良い)十分です。しかし、非常に特殊な形式の文字列を使って作業している場合、おそらく特定のケースでより良いアルゴリズムを見つけたり設計したりすることができます。
0
0
で見つかった定義のコードが含まれ、私はまだ答えの下に少しコメントを追加する方法を考え出したていない...私はこの下を掲示することを好みますマイケルバーの答え。とにかく、C++ 11はstd::hash<string>
をライブラリの一部として持っています。 Hereでは、サポートされているすべてのハッシュ関数を表示できます。
明示的に別のものを指定することもできますが、これはパフォーマンスが向上する場合もありますが、必ずしも必要ではありません。あなたの本当の質問は何ですか? – ildjarn
質問は - デフォルトのstd :: stringのためにうまくいくかどうか –
確かにそう望むでしょう!さもなければ、なぜコンパイラのベンダーが標準ライブラリをそれを出荷するのですか? – ildjarn