Я хотел создать пользовательскую хэш-функцию для неупорядоченной карты. Я нашел этот вопрос: С++ unordered_map терпит неудачу при использовании с вектором в качестве ключа и обнаружил, что если вы используете вектор в качестве ключа в неупорядоченной карте, вам нужно создать свою собственную хеш-функцию. Я экспериментировал с копированием хеш-функции, написанной так:
template <typename Container>
struct container_hash {
std::size_t operator()(Container const& c) const {
return boost::hash_range(c.begin(), c.end());
}
};
Но когда я пытаюсь создать unordered_map с моими ключами в виде вектора целых чисел, например:
unordered_map<vector<int>, int, container_hash<vector<int>>> hash;
Я получаю сообщение о том, что:
error: declaration of ‘struct std::hash<std::vector<int> >’
Я пробовал другие способы включить функцию container_hash в реализацию моей unordered_map, пробуя такие вещи, как
unordered_map<vector<int>, int, container_hash> hash;
Но снова я получаю еще одну ошибку:
type/value mismatch at argument 3 in template parameter list for ‘template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc> class std::unordered_map’
Я действительно не уверен, как обойти это, если бы кто-нибудь мог мне помочь, это было бы здорово! Спасибо!