C 0x でのハッシュ値の結合
C 0x では hash<...>() 関数が導入され、標準化されたアプローチが提供されます。さまざまなデータ型のハッシュ値を計算します。ただし、当初は Boost にあるものと同様の hash_combine 関数がありませんでした。
これに対処するために、Boost 開発者は、独自の関数を効果的にミラーリングする単純な実装を提案しています。
template <class T> inline void hash_combine(std::size_t& seed, const T& v) { std::hash<T> hasher; seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); }
この関数入力値 v のハッシュ値を既存のシードと結合します。加算、XOR 演算、およびシフトは、ハッシュ値のビットを均等に分散するのに役立ち、その結果、より堅牢で均一なハッシュ分散が得られます。
この関数を C 0x コードに組み込むことで、ハッシュ値をシームレスに組み合わせることができます。そして、言語によって提供される標準化されたハッシュ値計算の利点を活用できます。
以上がC 0x のハッシュ値を効率的に結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。