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()