Здравствуйте, Qbit86, Вы писали:
Q>И не используешь не по назначению функцию
Назначение функции hash — дать хеш.
Q>которая «designed to work with unordered associative containers... The unordered associative containers... use specializations of the template std::hash as the default hash function.» ©
Какой авторитетный источник. В стандарте тоже написано, что использовать только с хеш-контейнерами? Почему тогда не сделана внутренней?
Q>Будут при arity(k) > arity(M). Это пример был к тому, что твоя identity — никак не «идеальная».
Да, но лучше того, что сделали в Майкрософт.
MTD>>Допустим, мне просто нужен хеш, при хеш = k коллизий гарантировано нет.
Q>Так и используешь k, не вызывая никаких std::hash.
Мне нужно через std::hash — я обобщенный код пишу.
MTD>>Не убедительно. Почему в одном случае надо специально подбирать, а во втором само получится?
Q>Вот скажем ты отфильтровал из базы всех пользователей-женщин, и используешь их идентификаторы как ключи. А админ базы в своё время решил при создании всем пользователям-женщинам назначать id кратный 7, мол, их всё равно в шесть раз меньше в компании; почему нет. У тебя образовалась неявная связь, не случайная. А если у тебя рандомизация, без явной закономерности, то в такие совпадения почти невозможно попасть. Нет правдоподобных сценариев.
Совсем не убедительно.
MTD>>То есть в Майкрософте сделали фигню? Ну ок.
Q>Почему фигню, если вычислять индекс делением на степень двойки быстрее, чем делением на простое число?
А до этого в цикле 8 раз умножить и 8 раз сделать xor. Хммм, и правда быстрее