私は2つのプリミティブ型のstd :: pairに対して良いハッシュ関数を見つけようとしています。これは私がそれが今実現してい方法です。プリミティブ型の対のための良いハッシュ関数
template<typename T, typename U>
std::size_t operator()(const std::pair<T,U> &rhs) const
{
return stdext::hash_value<T>(rhs.first)^stdext::hash_value<U>(rhs.second);
}
私のような2組を持っている場合でも動作するように表示されます(1、2)及び(2、1)(数字は反転し)。それらは同じハッシュ値を生成しますが、値は依然としてハッシュマップに正常に挿入されます。何かご意見は?
質問に応じてタイトルを編集してください。 –
2つの異なる入力から同じハッシュを生成することが予想され、適切に実装されたハッシュテーブルが正しく処理します。しかし、ルックアップの速度に影響を与える可能性があります。 –
[boost :: hash_combine'](http://www.boost.org/doc/libs/1_53_0/doc/html/hash/combine.html)を使って2つのハッシュを組み合わせることができますあなたがブーストを使用することが許可されていない場合はソース) – Praetorian