Re: boost::unordered_map непонятки
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 19.08.11 22:58
Оценка: 3 (2) +1
Здравствуйте, flamin, Вы писали:

F>Друзья, наскнулся на любопытные грабли в unordered_map.

F>При использовании контейнера с ключами const char * хэш ведет себя некорректно.


F>struct eqstr

F>{
F> bool operator()(const char* s1, const char* s2) const
F> {
F> return strcmp(s1, s2) == 0;
F> }
F>};

F>typedef boost::unordered_map<const char*, int, boost::hash<const char*>, eqstr> TestMap;



eqstr вызывается только если совпали хеши. Стандартная функция хеширования для const char * считает хеш от значения указателя (reinterpret_cast<size_t>), а не от содержащейся по этому указателю строки. напишите свой хешер, который будет брать хеш от содержимого строки, и все заработает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.