Я делаю хеш-функцию для ключа pair < int,int >
.
В любом случае, я нашел следующую реализацию, в которой используются std::hash<>
:
typedef struct hasher_t {
template <class T1, class T2>
size_t operator()(const pair<T1,T2>& key) const {
//standard hasher for T1, T2
auto h1 = std::hash<T1>()(key.first); //also possible
auto h2 = std::hash<T2>()(key.second); //also possible
/*
auto h1 = std::hash<T1>{}(key.first);
auto h2 = std::hash<T2>{}(key.second);
*/
return h1 ^ (h2 - 1);
}
} hasher;
std::hash<T1>()
и std::hash<T1>{}
оба работают, но я не знаю, почему это работает.
Я даже не могу найти справочную статью по этому поводу.
Я предполагаю, что оба они создают буквально «безымянный временной экземпляр» для класса std::hash<T1>
и вызовите метод operator()(T1)
. Это правильно?