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