반응형
3개의 멤버변수 정렬.
3개의 멤버변수를 갖는 구조체가 있다. 각 변수 x, y, z는 int 타입이며, 정렬 시 다음 조건을 만족한다.
1. x는 1순위 오름차순
2. y는 2순위 내림차순
3. z는 3순위 오름차순.
우선 구조체를 정의한다.
struct Triangle{
int x,y,z;
Triangle(int x, int y, int z) : x(x), y(y), z(z){}
Triangle(){ x = 0, y =0 , z=0; }
bool operator < (const Triangle & t) const {
if(x == t.x){
if(y == t.y) return z < t.z;
return y > t.y;
}
return x < t.x;
}
};
테스트를 위해 main 함수 내부에서 sort를 통해 확인해 본다.
int main() {
Triangle t[4] = {{1,2,3}, {2,3,4}, {1,2,4}, {1,3,4} };
sort(t, t+4);
for(Triangle T : t) cout << T.x << " : " << T.y << " : " << T.z << endl;
return 0;
}
더 알아보기.
1. sort함수는 구조체 내부에서 < 오퍼레이터를 오버로딩하여 정렬하는 방법도 있지만 compare 함수를 정의해서 사용하는 방법도 있다.
2. 왜 < 오퍼레이터를 오버로딩했을까? < 오퍼레이터는 안 되는 건가? sort 함수 자체가 < 오퍼레이터 기준으로 정렬하기 때문.
3. 그렇기 때문에 compare 함수를 사용하여 sort를 이용하는 경우에도 < 오퍼레이터 기준으로 정렬 조건을 만들어야 한다.
반응형
댓글