Я хотел создать собственную хеш-функцию для неупорядоченной карты. Я нашел этот вопрос: Сбой 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’
Я действительно не знаю, как обойти это, если кто-нибудь может мне помочь, это было бы здорово! Спасибо!
Этот код компилируется просто отлично:
#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;
}
Ваша проблема, вероятно, в другом месте.