0

我将如何为包含起点和终点的线段实现 ​​operator<。我想将线段插入到地图中,因此顺序不需要是语义的,但它应该适用于所有情况。

4

1 回答 1

4

按字典顺序对所有内容进行排序:

struct Point { int x; int y; };

bool operator<(Point const & a, Point const & b)
{
    return (a.x < b.x) || (!(b.x < a.x) && (a.y < b.y));
}

或者使用现成的比较器tuple

#include <tuple>

// ...

return std::tie(a.x, a.y) < std::tie(b.x, b.y);

或者实际上将 astd::tuple<int, int>用于您的积分并且什么都不做!

然后,对这些行执行相同的操作:

struct LineSegment { Point x; Point y; };

// repeat same code as above, e.g.

bool operator<(LineSegment const & a, LineSegment const & b)
{
    return std::tie(a.x, a.y) < std::tie(b.x, b.y);
}

重复一遍,no-work-at-all 解决方案一直使用元组:

typedef std::tuple<int, int> Point;
typedef std::tuple<Point, Point> LineSegment;
// everything "just works"
于 2012-11-25T20:18:03.157 回答