2014-12-28 2 views
0

У меня есть класс для затаив Points в 2D пространстве, как это:Как сравнить две точки в 2D-пространстве

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

//some additional information 

private: 
    double x, y; 
}; 

Я хотел бы иметь эти Points в std::set, но я не знаю, как писать сравнить STRUCT

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) Jarod42

+0

@ πάνταῥεῖ Почему бы мне не использовать этот способ? (struct way) – MoNo

ответ

2

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

P1 < P2 тогда и только тогда P1.x < P2.x || (P1.x == P2.x && P1.y < P2.y)

Смежные вопросы