Доступ к хеш-функциям встроенного типа для tr1 / unordered_map - PullRequest
2 голосов
/ 11 апреля 2011

Я возился с шаблоном класса unordered_map, и я хотел бы написать собственный хеш для своего класса.В документации к нему упоминается, что для встроенных типов предусмотрены функции хеширования по умолчанию.Итак, если вы объявляете:

std::tr1::unordered_map<std::string, int> foo;

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

Здесь приведен хороший пример того, как предоставить функтор, если вам нужна пользовательская хеш-функция.

Однако, что если у меня есть сложный класс, имеющий член std::string, который я хотел бы использовать в качестве ключа для вставки / удаления в unordered_map?Я не хочу переписывать свой собственный хеш.Я хочу использовать то, что уже было написано для типа std::string.

1 Ответ

1 голос
/ 11 апреля 2011

Функтор хеша по умолчанию предоставляется std::hash<T>, который возвращает size_t.

Таким образом, вы можете объединить хэш от нескольких членов класса, например вычисляя (std::hash<T>()(a) + prime * (std::hash<T>()(b) + prime * std::hash<T>()(c))).

...