Проблемы с использованием хэш-функции - PullRequest
1 голос
/ 22 декабря 2009

Я реализую карту плотного хэша Google в своем коде C ++. Я хочу использовать MurmurHash2 (http://murmurhash.googlepages.com/) в качестве хэш-функции. Но вот проблема. Я много пробовал, но не могу заставить работать хэш-функцию. В примере показано использование хэш-функции по умолчанию (hash ).

dense_hash_map < const char * , int, hash < const char*>, eqstr> months;

Я хотел бы заменить hash< const char * > на

unsigned int MurmurHash2 ( const char * key, int len, unsigned int seed)

1 Ответ

3 голосов
/ 22 декабря 2009

Очевидно, что имеется несоответствие между сигнатурой, которую dense_hash_map требует от своей функции хеширования, и сигнатурой, которую MurmurHash2 предоставляет. Вы должны будете выполнить свое собственное «сопоставление импеданса» в собственной функции или функторе, который реализует требуемую подпись и внутренне использует предоставленную. Это, однако, требует способности определять len, соответствующий данному const char *, и на это нет очевидного ответа. Планируете ли вы хранить в своей хэш-карте только "массивы символов с нулевым символом в конце", как в старомодных C "псевдостроках", так что strlen будет достаточно? или что еще ...?

Может быть, лучше использовать std::string (или какой-то другой недвусмысленный тип C ++ в зависимости от того, чего именно вы пытаетесь достичь!) Вместо этих сомнительных const char * s, было бы лучшим началом!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...