Пользовательская хеш-функция

Возник следующий вопрос при написании хеш-таблицы. Надо сделать так, чтобы ключом мог быть любой тип данных. Для использования std::unordered_map с пользовательским типом данных необходимо реализовать класс MyHashFunction, в котором переопределен оператор(), и создание объекта выглядит следующим образом: unordered_map<MyType, int, MyHashFunction>. Не могу разобраться, как это реализовать для своей таблицы. Как внутри нее вызывать пользовательскую хеш-функцию?


Ответы (1 шт):

Автор решения: KoVadim

В своем коде просто вызывайте некую функцию size_t my_hash(T t). Так как Ваш класс шаблонный, то все будет "компилироваться". Напишите реализации (перегрузки) этой функции для базовых и основных типов. Когда пользователь Вашего класса захочет использовать свой тип с Вашей хеш таблицей, он получит ошибку компиляции/линковки, что нет нужной перегрузки. Он может у себя написать реализацию этой функции и все заработает.

Стандартный unordered_map именно так и реализован. Он использует std::hash. В целом, Вы можете использовать эту функцию у себя для начала, а потом перейти на свою реализацию.

→ Ссылка