c++ - перегрузка оператора "<" для ключа-структуры в std::map


1

Имеется:

struct coordinate
    {
    int pos_x, pos_y;
    coordinate(int, int);
    }  

А также пользовательский класс Class.

Вопрос: как нужно перегрузить

bool operator < ();

для coordinate, чтобы можно было создать std::map<coordinate, Class> Map;?

Огромное спасибо заранее.

Источник
  •  99
  •  1
  • 31 янв 2018 2018-01-31 11:44:21

1 ответ

4

А как вы хотите сравнивать? вот, скажем, (2,5) больше или меньше (5,2)?

Например, если сравнивать сначала по x, а при равенстве координаты x - по y, то достаточно типа такого:

bool operator<(const coordinate&a,
               const coordinate&b)
{
    if (a.pos_x == b.pos.x) return a.pos_y < b.pos_y;
    return a.pos_x < b.pos.x;
}

или

bool operator<(const coordinate&a,
               const coordinate&b)
{
    return std::tie(a.pos_x,a.pos_y) < std::tie(b.pos_x,b.pos_y);
}
  • 31 янв 2018 2018-01-31 11:12:23
Плюсик за tie. :) — 31 янв 20182018-01-31 11:21:29.000000
а ещё можно в структуру coordinates добавить метод: bool operator<(const coordiantes& other) const{...} 31 янв 20182018-01-31 11:21:29.000000
@AndrejLevkovitch Моя любимая фраза - "Без точного ТЗ результат ХЗ". Я привел вариант для иллюстрации, не более того. — 31 янв 20182018-01-31 11:21:29.000000
думаю логичнее всего сравнивать координаты больше-меньше по 2 и 4 четвертям. — 31 янв 20182018-01-31 11:21:29.000000
Огромное спасибо! — 31 янв 20182018-01-31 11:21:29.000000