Проблемы с созданием пользовательской хеш-функции unordered_map?

Я хотел создать собственную хеш-функцию для неупорядоченной карты. Я нашел этот вопрос: Сбой unordered_map в C ++ при использовании с ключом в качестве вектора и обнаружил, что если вы используете вектор в качестве ключа в неупорядоченной карте, вам нужно создать собственную хеш-функцию. Я экспериментировал с копированием хеш-функции, написанной так:

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’

Я действительно не знаю, как обойти это, если кто-нибудь может мне помочь, это было бы здорово! Спасибо!

0

Решение

Этот код компилируется просто отлично:

#include <vector>
#include <boost/unordered_map.hpp>

template <typename Container>
struct container_hash {
std::size_t operator()(Container const& c) const {
return boost::hash_range(c.begin(), c.end());
}
};

int main()
{
boost::unordered_map
<std::vector <int>, int,
container_hash <std::vector  <int> > > foo;
return 0;
}

Ваша проблема, вероятно, в другом месте.

1

Другие решения


По вопросам рекламы [email protected]