Я думаю, что ключевым моментом, который вам не хватает, является то, что вы поставляете два функтора в неупорядоченный контейнер, и они должны работать вместе.
Есть функция ha sh, которая вычисляет число из объект.
Есть функция сравнения, которая сравнивает два объекта на "эквивалентность".
Как сказал @Eljay в своем комментарии, для двух объектов, которые сравнивают "эквивалент" (функция сравнения возвращает true
), функция ha sh должна возвращать то же значение.
Если ваши функции не предоставляют эту гарантию, контейнеры не будут работать правильно.
Относительно хорошая ссылка (хотя и не является достоверной)
std :: unordered_set : соответствует требованиям UnorderedAssociativeContainer.
UnorderedAssociativeContainer : параметризованы с помощью Key / Hash / Pred.
С требованием:
* Если два ключа равны согласно Pred.
* Ха sh должен возвращать одинаковое значение для обеих клавиш.