C 0x のハッシュ値の結合
C 0x はハッシュを導入しました<>テンプレート。汎用ハッシュ関数を提供します。ただし、Boost に実装されている hash_combine 関数はネイティブには含まれていません。この記事では、このような関数を C 0x で実装する実用的な方法について説明します。
xor_combine を使用した解決策
1 つのアプローチは、C 0x の xor_combine を利用することです。この関数は、2 つのハッシュ値を XOR 演算して結合します。実装例を次に示します。
template<class T> inline void hash_combine(std::size_t& seed, const T& v) { seed ^= hash<T>{}(v); }
このメソッドは、値 v のハッシュとシードを単に XOR します。
Boost の hash_combine を使用した解決策
あるいは、Boost 実装を適応させることもできます。 hash_combine:
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); }
この関数は、std::hash<> を使用して v のハッシュを計算します。
どちらのアプローチも、C 0x のハッシュ値を結合するメソッドを提供します。実装の選択は、アプリケーションの特定の要件によって異なります。
以上がC 0x でハッシュ値を効率的に組み合わせるには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。