Своя хеш-функция для std::unordered_map в C++
Для пользовательского типа ключа стандартный хеш может быть недоступен или неудобен.
Третий параметр шаблона std::unordered_map -
функтор с operator(), который по ключу
возвращает std::size_t. Запишем ключ
как структуру с одним целым, хеш возьмем
из этого поля, и создадим словарь:
#include <unordered_map>
struct Cell {
int id;
};
struct CellHash {
std::size_t operator()(Cell key) const {
return static_cast<std::size_t>(key.id);
}
};
bool operator==(Cell a, Cell b) {
return a.id == b.id;
}
std::unordered_map<Cell, int, CellHash> grid = {{{5}, 50}};
std::cout << grid[{5}] << "\n";
Объявите структуру Tag с полем int code,
функтор TagHash с operator(), возвращающим это поле,
и std::unordered_map<Tag, std::string, TagHash>
с парой ключ 3 и строка "c". Выведите значение для этого ключа.