[c++] struct

jw·2022년 9월 6일
0

📘 코테 준비 📘

목록 보기
29/37

struct를 이용해서
x를 1순위로 오름차순으로 정렬하고 y가 2순위로 오름차순 z가 3순위로 오름차순 정렬하기

1. struct 내에서 커스텀 정렬

struct Point
{
	//이 구조체의 변수들
    int y, x, z;  
    
    // y,x를 받아 생성한다
    Point(int x, int y, int z) : y(y), x(x), z(z) {} 
    
    // y,x 정해지지 않으면 이걸로 초기화
    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;
    }
}

;
vector<Point> v;

int main()
{
    for (int i = 10; i >= 1; i--)
    {
        Point a = {i, 10 - i, i - 1};
        v.push_back(a);
    }

    sort(v.begin(), v.end());

    for (auto it : v)
        cout << it.x << " : " << it.y << " : " << it.z << '\n';
    return 0;
}

2. struct와 cmp 함수 분리

struct Point
{
    int x, y, z;
};

bool cmp(const Point &a, const Point &b)
{
    if (a.x == b.x)
    {
         if (a.y == b.y)
         {
             return a.z > b.z;
         }
        return a.y > b.y; // x값 같으면 y기준 내림차순
    }
    return a.x > b.x; // x기준 내림차숮

};

vector<Point> v;
int main()
{
    for (int i = 10; i >= 1; i--)
    {
        Point a = {100, 10 - i, i - 1};
        v.push_back(a);
    }

    sort(v.begin(), v.end(), cmp);

    for (auto it : v)
        cout << it.x << " : " << it.y << " : " << it.z << '\n';
    return 0;
}
profile
다시태어나고싶어요

0개의 댓글