Какова цель std::hash и / или boost::hash?
Зачем предоставлять хеш-функцию без указания какой-либо реализации ссылки, а также без указания алгоритма ссылки ( md5, sha256 и т. Д. И т. Д.)?
Также есть аналогичные функции для структур данных, такие как стандарт C++, совместимый std::unordered_map/set/multimap/multiset::hash_function
,
Так что я не получаю это:
- Зачем предоставлять такие недокументированные методы
- Детали реализации являются основополагающими для правильного использования хеш-функций, с точки зрения программиста, какова цель этих функций
- Эта функция может быть связана с конкретным алгоритмом?
1 ответ
Зачем предоставлять такие недокументированные методы
Они не без документов.
Детали реализации являются основополагающими для правильного использования хеш-функций, с точки зрения программиста, какова цель этих функций
Реализация не определена, они просто должны использоваться вместе с неупорядоченными контейнерами. Они должны быть как можно более хорошими хэш-функциями, чтобы эффективно распределять элементы в сегменты. Все остальное не указано.
Обратите внимание, что пользователь должен предоставлять их при использовании неупорядоченных контейнеров с пользовательскими типами.
Эта функция может быть связана с конкретным алгоритмом?
Почему бы и нет?