아래의 구문을 이해하기까지 꽤나 시간이 걸렸지만 이해한것이 있어 적어두고자 한다
bool operator < (const Point & a) const {
if (x == a.x) return y < a.y; // 호출없이 쓰면 기존 구조체의 멤버
return x < a.x; // a로 호출해서 쓰면 구조체 a의 멤버
}
operator < (기존 비교 연산자 <)를 새롭게 정의하는 코드이다.
연산자 < 의 왼쪽는 비교할 기존 (구조체 or 포인터)의 멤버를 놓는다
연산자 < 의 오른쪽은 비교할 외부 a (구조체 or 포인터)의 멤버를 놓는다
기존 구조체의 경우 a.x처럼 쓰지 않고 x로만 표현해도 기존 구조체의 멤버로 인식한다
즉, 기존 구조체 내부의 x 변수의 값과 비교하는 a구조체 내부의 x변수의 값이 같다면
기존 구조체 내부 y 변수의 값보다 a구조체 내부 y 변수의 값이 더 크다는 뜻이다
구조체끼리 x변수가 같은 경우가 아니면, a구조체의 x변수가 기존 구조체의 x변수보다 크다는 뜻이다
위 식의 경우 기존 포인터의 위치보다 새 포인터 a의 위치가 더 값이 오도록 나열할때 쓰인다 ex)오름차순 등등
struct Point {
int y, x, z;
Point (int y, int x, int z) : y(y), x(x), z(z) {}
Point (){ y = -1; x = -1; z= -1; }
bool operator < (const Point & a) const (
if(x == a.x) {
if (y == a.y) return z < a.z;
return y > a.y;
}
return x < a.x;
}
};
위 식의 경우는 x가 1순위로 오름차순, y가 2순위로 내림차순, z가 3순위로 오름차순 정렬이라는 것을 알 수 있다
'C++ > 기초 및 알고리즘 함수' 카테고리의 다른 글
[c++] lowe_bound, upper_bound, rotate (0) | 2022.06.13 |
---|---|
[c++] 제곱, 제곱근 함수 pow, sqrt (0) | 2022.06.10 |
배열 제어 함수 (0) | 2022.06.08 |
백터 제어 함수들 (0) | 2022.06.08 |
[c++] 벡터 순회에 사용하는 for문 (0) | 2022.06.08 |
댓글