订购由两点组成的线段

时间:2012-11-25 20:11:53

标签: c++ graphics operators line

我如何实现运营商<对于由起点和终点组成的线段。我想将线段插入到地图中,因此顺序不需要是语义的,但它应该适用于所有情况。

1 个答案:

答案 0 :(得分: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);

或者实际上使用std::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);
}

重复一遍,无需工作的解决方案只是一直使用元组:

typedef std::tuple<int, int> Point;
typedef std::tuple<Point, Point> LineSegment;
// everything "just works"