Я пытался специализировать хэш для моего собственного типа, шаблонного ключа.Специализирующийся std :: hash для templated Key
Я основывался на нем cppreference.
Я получаю ошибку компиляции «Стандарт C++ не предоставляет хэш для этого типа». Я полагаю, я просто сделал это неправильно. Может ли компилятор даже поддерживать такой шаблон?
namespace std {
template<typename SType, typename AType, typename PType>
struct MyKey {
const SType from;
const AType consume;
const PType pop;
};
template<typename SType, typename AType, typename PType>
struct hash<MyKey<SType, AType, PType>> {
size_t operator()(MyKey const &key) {
std::hash<SType>()(key.from);
std::hash<AType>()(key.consume);
std::hash<PType>()(key.pop);
}
};
}
Вы должны научить компилятор, как хэширования ваших типов - не просто 'MyKey', но' SType'. 'AType' и' PType' тоже (по крайней мере те, которые не являются 'typedef' для известных типов). После того, как вы это сделали, хеш MyKey не должен просто вызывать хеш-функции переменной-члена, он должен возвращать значение hash_combine'd, включающее хэши этих переменных-членов. Есть *** много *** из существующих вопросов, объясняющих это. –