始点と終点で構成される線分の演算子<を実装するにはどうすればよいですか。線分をマップに挿入して、順序がセマンティックである必要がないようにしたいのですが、すべての場合に機能するはずです。
質問する
170 次
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);
または、実際にstd::tuple<int, int>
ポイントにaを使用して、何もしないでください。
次に、行に対して同じことを行います。
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"
于 2012-11-25T20:18:03.157 に答える