Добавлять специализации std::hash - ок
Не надо в другой namespace ничего подгружать, предикат указывается как параметр шаблона словаря.
Если ты правишь STL - то да! А так - нет )) Вторжение в std считается фу во многих style guides. Идиома - делаешь свой hash в своем неймспейсе, чтобы ADL работал. При использовании пишешь using std::hash; ... = hash(...); И тогда будут цепляться и твой, и из std в зависимости от типа аргумента. Разумеется, using нужен только тогда, когда сам руками вызываешь этот метод явно, стандартное и так все будет работать "из коробки". Тоже самое относится к swap и вообще ко всем свободным функциям.
std::hash для того и разрешили специализировать, чтобы это было дефолтным поведением для пользовательского типа. И это нормальный подход, учитывая, что std::hash - хеш по умолчанию для всех контейнеров стандартной библиотеки.
А когда ADL для шаблонов классов сделали?
И хэш - это функтор, а не функция, так что сравнивать его с swap как минимум некорректно
Обсуждают сегодня