Я хотел создать пользовательскую хэш-функцию для неупорядоченной карты. Я нашел этот вопрос: C++ unordered_map fail when used with a vector as key и обнаружил, что если вы используете вектор в качестве ключа на неупорядоченной карте, вам нужно создать собственную хэш-функцию. Я экспериментировал копирование хэш-функции записывается в виде так:Не удается создать пользовательскую хэш-функцию 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’
Я действительно не знаю, как это обойти, если кто-нибудь может помочь мне, что было бы здорово! Благодаря!
Какой компилятор? И gcc и clang [accept] (http://coliru.stacked-crooked.com/a/e4988e4aad76243f) ваше первое определение. – Praetorian
Я пытаюсь написать программу с использованием MPI, поэтому я использовал компилятор mpicxx @Praetorian – user1871869
Посмотрите, скомпилирует ли он код, с которым я связан, если это не проблема с этим компилятором. – Praetorian