У меня есть класс для хранения моих 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);
}
};
Если вам нужно только какое-либо упорядочивающее отношение для хранения в наборе, вы можете использовать порядок словаря:
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)
bool Point::operator<(const Point& other)
на 1-м месте?return std::tie(p1.x, p1.y) < std::tie(p2.x, p2.y);