C 0x でのハッシュ値の結合
C 0x では、標準ライブラリでのハッシュ化を容易にするために hash<>() が導入されています。ただし、Boost の実装と同様の組み込み hash_combine 関数がありません。このため、C 0x でそのような機能をどのようにエミュレートするかという問題が生じます。
C 0x xor_combine と Boost の hash_combine の比較
Boost の hash_combine 関数はビット単位の演算を実行して、複数の関数を効率的に結合します。ハッシュ値を 1 つにまとめます。 C 0x は xor_combine を提供しますが、hash_combine を直接置き換えるものではありません。 xor_combine は 2 つのハッシュ値を結合するためにのみ使用できますが、hash_combine は任意の数の値を処理します。
C 0x での hash_combine の実装
C 0x で 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); }
この実装は、XOR 演算、ビット シフト、定数加算の組み合わせを使用して、ハッシュ値を完全に混合することを保証する Boost のアルゴリズムを模倣しています。
この hash_combine 関数では、C 0x の強力なハッシュ機能を使用して、複数のハッシュ値を 1 つの結果に簡単に組み合わせることができます。
以上がC 0x でハッシュ値を効果的に組み合わせる方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。