C ++ unordered_map пользовательский тип - PullRequest
3 голосов
/ 18 ноября 2010

У меня есть класс, который используется в качестве ключа в unordered_map. Когда я пытался скомпилировать код, он показывает неопределенную ссылку на std::hash<typeName>::operator()(typename) const. Как я могу пойти, чтобы исправить это? Какую дополнительную функцию мне нужно перегрузить, чтобы пользовательский тип использовался в unordered_map?

У меня есть структура dateTime, в которой хранится информация о дате и времени.

Сообщение об ошибке выглядит следующим образом:

In function 'std::__detail::_Hash_code_base<DateTime, std::pair<DateTime const, int>, std::_Select1st<std::pair<DateTime const, int> >, std::equal_to<DateTime>, std::hash<DateTime>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, false>::_M_hash_code(DateTime const&) const': testing.cpp:(.text._ZNKSt8__detail15_Hash_code_baseI10DateTimeSt4pairIKS1_DeESt10_Select1stIS4_ESt8equal_toIS1_ESt4hashIS1_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE12_M_hash_codeERS3_[std::__detail::_Hash_code_base<DateTime, std::pair<DateTime const, int>, std::_Select1st<std::pair<DateTime const, int> >, std::equal_to<DateTime>, std::hash<DateTime>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, false>::_M_hash_code(DateTime const&) const]+0x23): undefined reference to 'std::hash<DateTime>::operator()(DateTime) const'

Спасибо.

1 Ответ

4 голосов
/ 18 ноября 2010

Вы должны реализовать алгоритм хеширования, иначе стандартный контейнер не выберет ваш тип, потому что он не знает, как вычислить хеш-код для него.

namespace std
{    
   template <>
   struct hash<DateTime> : public unary_function<DateTime, size_t>
   {
       size_t operator()(const DateTime& v) const
       {
           return /* my hash algorithm */;
       }
   };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...