25 seed ^= hasher( val ) + 0x9e3779b9 + ( seed << 6 ) + ( seed >> 2 );
28 template<
class... TupleArgs>
29 struct std::hash<std::tuple<TupleArgs...>> {
34 template<
size_t Idx,
typename... TupleTypes>
35 inline typename std::enable_if<Idx ==
sizeof...( TupleTypes ),
void>::type
42 template<
size_t Idx,
typename... TupleTypes>
43 inline typename std::enable_if < Idx<
sizeof...( TupleTypes ),
void>::type
44 hash_combine_tup(
size_t& seed,
const std::tuple<TupleTypes...>& tup )
const {
48 hash_combine_tup<Idx + 1>( seed, tup );
52 size_t operator()(
const std::tuple<TupleArgs...>& tupleValue )
const {
55 hash_combine_tup<0>( seed, tupleValue );
66 template<
class T1,
class T2>
67 std::size_t
operator()(
const std::pair<T1, T2>& p )
const {
68 std::size_t lhs = std::hash<T1>()( p.first ), rhs = std::hash<T2>()( p.second );
69 return lhs ^ ( rhs + 0x9e3779b9 + ( lhs << 6 ) + ( lhs >> 2 ) );
76 std::size_t
operator()(
const std::vector<T>& V )
const {
77 std::size_t hash = V.size();
79 hash ^= std::hash<T>()( i ) + 0x9e3779b9 + ( hash << 6 ) + ( hash >> 2 );
void hash_combine(std::size_t &seed, const T &val)
Definition: hash.hpp:23
Definition: binary_polynomial_model.hpp:139
Hash function for std::unordered_map.
Definition: hash.hpp:65
std::size_t operator()(const std::pair< T1, T2 > &p) const
Definition: hash.hpp:67
std::size_t operator()(const std::vector< T > &V) const
Definition: hash.hpp:76
std::enable_if< Idx==sizeof...(TupleTypes), void >::type hash_combine_tup(size_t &, const std::tuple< TupleTypes... > &) const
Definition: hash.hpp:36