std::hash<Key>::operator()
Specializations of std::hash should define an operator() that:
-  Takes a single argument keyof typeKey.
-  Returns a value of type std::size_tthat represents the hash value ofkey.
-  For two parameters k1andk2that are equal,std::hash<Key>()(k1) == std::hash<Key>()(k2).
-  For two different parameters k1andk2that are not equal, the probability thatstd::hash<Key>()(k1) == std::hash<Key>()(k2)should be very small, approaching1.0/std::numeric_limits<size_t>::max().
Parameters
| key | - | the object to be hashed | 
Return value
a std::size_t representing the hash value.
Exceptions
Hash functions should not throw exceptions.
Example
The following code shows how to specialize the std::hash template for a custom class.
#include <functional>
#include <iostream>
#include <string>
 
struct Employee {
  std::string name;
  unsigned int ID;
};
 
namespace std {
template <>
class hash<Employee> {
 public:
  size_t operator()(const Employee &employee) const
  {
    // computes the hash of an employee using a variant 
    // of the Fowler-Noll-Vo hash function
    size_t result = 2166136261;
 
    for (size_t i = 0, ie = employee.name.size(); i != ie; ++i) {
      result = (result * 16777619) ^ employee.name[i];
    }
 
    return result ^ (employee.ID << 1);
  }
};
}
 
int main()
{
  Employee employee;
  employee.name = "Zaphod Beeblebrox";
  employee.ID = 42;
 
  std::hash<Employee> hash_fn;
  std::cout << hash_fn(employee) << '\n';
}Output:
177237019
    © cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
    http://en.cppreference.com/w/cpp/utility/hash/operator()