unordered_map<>
(c ++ 11)は、ハッシュ関数を使用して、そのキー値を内部的に編成します。衝突確率は非常に小さい(1.f/std:numeric_limits<size_t>::max()
です)。
unordered_map<>
ヒープメモリ管理のストレージコンテナとして使用しても大丈夫ですか?つまり、2つの要素が(衝突によって)混同されると、プログラムの安定性が失われます。free()
私の場合、同じポインタを繰り返し呼び出すことになります。(SIGSEGV
)。
または、衝突の確率は、キーを検索するときにのみ重要です。そして、2つの異なるキーが常に異なる値を参照することが保証されていますか?
フォローアップの質問:unordered_map
標準のハッシュ関数を使用すると、私のアプリケーションでは問題がないと言います。衝突が発生しないことを確認したい場合、および要素の最大数に制限できる場合size_t
は、引数自体を返す独自のハッシュ関数を提供できます。何かのようなもの:
template<class T>
struct Hash
{
size_t operator()(T t) {
return (size_t)t;
}
}
衝突がないことを確認しますか?