10 template <
typename ValueSet,
typename Value =
typename ValueSet::value_t>
26 template <
typename ValueSet>
27 class equal_to :
public std::equal_to<typename ValueSet::value_t>
31 using value_t =
typename valueset_t::value_t;
35 return valueset_t::equal(v1, v2);
46 -> decltype(std::hash<T>{}(
v))
48 auto hasher = std::hash<T>{};
58 seed ^= h + 0x9e3779b9 + (seed<<6) + (seed>>2);
71 template <
typename ValueSet>
76 using value_t =
typename valueset_t::value_t;
80 return valueset_t::hash(v);
90 template <
typename ValueSet,
typename Value =
typename ValueSet::value_t>
98 return valueset_t::less(lhs, rhs);
103 template <
typename ValueSet,
typename Value =
typename ValueSet::value_t>
111 return valueset_t::less(lhs, rhs) || valueset_t::equal(lhs, rhs);
118 template <
typename Value,
size_t Size>
119 struct hash<
std::array<Value, Size>>
127 size_t res = h(v[0]);
128 for (
size_t i = 1; i < Size; i++)
134 #if defined __clang__ and __clang_major__ == 3 and __clang_minor__ < 7 typename valueset_t::value_t value_t
typename valueset_t::value_t value_t
size_t operator()(const value_t &v) const
bool operator()(const value_t &lhs, const value_t &rhs) const
This is useful to make hashes with labels or weights as keys without using non-default constructors; ...
bool operator()(const value_t &v1, const value_t &v2) const
void hash_combine_hash(std::size_t &seed, size_t h)
auto hash_value(const T &v) -> decltype(std::hash< T >
Following the naming convention of Boost.
Functor to compare Values of ValueSets.
bool operator()(const value_t &lhs, const value_t &rhs) const
This is useful to make hashes with labels or weights as keys without using non-default constructors; ...
int operator()(const value_t &lhs, const value_t &rhs) const
void hash_combine(std::size_t &seed, const T &v)
Functor to compare Values of ValueSets.
Functor to three-way comparison Values of ValueSets.
std::array< Value, Size > value_t
size_t operator()(const value_t &v) const
int compare(const Lhs &lhs, const Rhs &rhs)
Comparison between lhs and rhs.