16 size_t hash_combine(
size_t seed,
const T& v);
18 template <
class T,
class... Rest>
19 size_t hash_combine(
size_t seed,
const T& v, Rest... rest) {
20 return hash_combine(hash_combine(seed, v), rest...);
24 template <
typename It>
25 size_t hash_range(It first, It last) {
27 for (; first != last; ++first) {
28 seed = hash_combine(seed, *first);
36 size_t operator()(
const T& v)
const {
return std::hash<T>{}(v); }
40 template <
class T1,
class T2>
42 size_t operator()(
const std::pair<T1, T2>& p)
const {
43 return hash_combine(0, p.first, p.second);
50 size_t operator()(
const std::vector<T>& vec)
const {
51 return hash_range(vec.begin(), vec.end());
58 size_t operator()(
const std::set<T>& s)
const {
59 return hash_range(s.begin(), s.end());
64 template <
class T1,
class T2>
66 size_t operator()(
const std::map<T1, T2>& map)
const {
67 return hash_range(map.begin(), map.end());
74 inline size_t hash_combine(
size_t seed,
const T& v) {
75 seed ^=
hash_value<T>{}(v) + 0x9e3779b9 + (seed << 6U) + (seed >> 2U);
Sum type of symbolic::Expression and symbolic::Formula.
Definition: api.cc:9
Computes the hash value of v using std::hash.
Definition: hash.h:35