std::unordered_map.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpUhEq 185 of 696 menu
◀ ▶

Свой предикат равенства для 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.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить