2012-11-25 3 views
0

시작점과 끝점으로 구성된 선분에 대해 어떻게 연산자 <을 구현합니까? 나는 그 라인 세그먼트를 맵에 삽입하여 순서가 의미 론적 일 필요는 없지만 모든 경우에 대해 작동해야합니다. 사전 식두 개의 점으로 구성된 Odering 선분

답변

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>를 사용하고 전혀 아무것도하지! 그런 다음

는, 라인에 대해 동일한 작업을 수행합니다

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

내가 라인을 주문하려면 :

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); } 

반복하기는없는 작업 - 모든 솔루션은 튜플 모든 방법을 사용하여 단일 점이 아닌 두 점을 갖는 세그먼트. – funkysash

+0

@ funkysash : 죄송합니다. 나는 잘못 읽었습니다.이 아이디어를 재귀 적으로'struct Line {Point x; 포인트 y; };'. 똑같은 코드. –

+0

은 매력처럼 작동합니다. 고맙습니다 :) – funkysash

관련 문제