@quad69

Как можно использовать union в качестве ключа unordered_map?

Есть такой union:
union ObjectPos {
    unsigned short x;
    unsigned short y;
}


И мне нужно использовать его в качестве ключа для unordered_map:
std::unordered_map<ObjectPos , Object*> objects;

Задача стоит в том, что есть N штук экземпляров класса Object и мне нужно по x и y находить их.
Конкретное количество неизвестно и по ходу работы программы одни объекты удаляются, и могут появиться другие (всё происходит в разных координатах).

Можно конечно ObjectPos заменить на обычный int и написать функцию которая будет из двух short'ов делать один int (и наоборот), но это крайне не удобно...
  • Вопрос задан
  • 149 просмотров
Решения вопроса 1
includedlibrary
@includedlibrary
Вам нужно использовать структуру из двух значений типа short. Для неё уже нужно будет определить вычисления хэш-функции, например так:
struct MyStruct {
    unsigned short x;
    unsigned short y;
};

template<>
struct std::hash<MyStruct> {
    std::size_t operator()(MyStruct const& s) const noexcept {
        return ((size_t)s.x << 16) | s.y;
    }
};
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы