Разбираем, как сделать составной ключ для
std::unordered_map: проектируем
struct-ключ по нужным полям, пишем корректный
operator==, соблюдаем контракт
std::hash (если
a == b, то и хеши обязаны совпасть), смешиваем хеши полей и подключаем хешер либо третьим шаблонным параметром контейнера, либо через специализацию
std::hash<Key>.