Как сравнить две точки в 2d пространстве

0

У меня есть класс для хранения моих Points в 2D-пространстве следующим образом:

class Point{
public:
Point(double a, double b){ x = a; y = b; }

//some additional information

private:
    double x, y;
};

Мне нравится иметь эти Points в std::set но я не знаю, как написать структуру сравнения

struct cCompare{
    bool operator()(const Point &p1, const Point &p2){
         //what should I write here??
    }
};

Две точки, такие как p и q, равны, если (p_1,p_2) = (q_1,q_2). Должен ли я хранить некоторую дополнительную информацию в классе Point? Что-то вроде индекса или любого уникального номера для каждой Point? И есть что-то вроде этого:

struct cCompare{
    bool operator()(const Point &p1, const Point &p2){
         return (p1.index < p2.index);
    }
};
  • 0
    Почему бы не предоставить bool Point::operator<(const Point& other) на 1-м месте?
  • 2
    Вы можете использовать: return std::tie(p1.x, p1.y) < std::tie(p2.x, p2.y);
Показать ещё 11 комментариев
Теги:
stdset

1 ответ

2

Если вам нужно только какое-либо упорядочивающее отношение для хранения в наборе, вы можете использовать порядок словаря:

P1 < P2 если P1.x < P2.x || (P1.x == P2.x && P1.y < P2.y) P1.x < P2.x || (P1.x == P2.x && P1.y < P2.y)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню