2

クラステンプレートをいじって、unordered_mapクラスのカスタムハッシャーを作成したいと思います。そのドキュメントには、デフォルトのハッシュ関数が組み込み型に提供されていると記載されています。したがって、次のように宣言すると、

std::tr1::unordered_map<std::string, int> foo;

自動的にハッシャーが定義されます。

カスタムハッシュ関数が必要な場合にファンクターを提供する方法については、ここに良い例があります。

std::stringただし、への挿入/削除のキーとして使用したいメンバーを持つ複雑なクラスがある場合はどうなりunordered_mapますか?自分のハッシャーを書き直したくない。std::stringそのタイプに対してすでに書かれているものを活用したいと思います。

4

1 に答える 1

1

デフォルトのハッシュファンクターは、std::hash<T>を返すことによって提供されますsize_t

したがって、たとえばを計算することによって、クラスの複数のメンバーからのハッシュを組み合わせることができます(std::hash<T>()(a) + prime * (std::hash<T>()(b) + prime * std::hash<T>()(c)))

于 2011-04-11T19:27:01.830 に答える