본문 바로가기
C++

sort func ex1

by oncerun 2023. 6. 25.
반응형

 

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를 이용하는 경우에도 < 오퍼레이터 기준으로 정렬 조건을 만들어야 한다.

 

 

반응형

'C++' 카테고리의 다른 글

pair, tuple  (0) 2023.06.24
문자열 숫자 변환  (0) 2023.06.24
STL  (0) 2023.06.23
템플릿  (0) 2020.11.12
추상 클래스  (0) 2020.11.12

댓글