Свой предикат равенства для std::unordered_map в C++
Хеш-таблица считает два ключа одинаковыми, только если совпадают и хеш, и предикат равенства.
Четвертый параметр шаблона std::unordered_map -
функтор с operator(), который по двум
ключам возвращает bool. Тот же тип
ключа, что и для хеша: структура с одним
целым. Вторая вставка с тем же ключом не
увеличит size. Запишем предикат,
словарь и выведем размер:
#include <unordered_map>
struct Slot {
int num;
};
struct SlotHash {
std::size_t operator()(Slot key) const {
return static_cast<std::size_t>(key.num);
}
};
struct SlotEqual {
bool operator()(Slot a, Slot b) const {
return a.num == b.num;
}
};
std::unordered_map<Slot, int, SlotHash, SlotEqual> bins = {{{2}, 20}, {{2}, 99}};
std::cout << bins.size() << "\n";
Для структуры Pin с полем int val
объявите PinHash и PinEqual,
создайте std::unordered_map<Pin, char, PinHash, PinEqual>
и вставьте два раза ключ с 1. Выведите size.