Struct

EHminShoov2J·2023년 8월 25일
0

CPP/코딩테스트

목록 보기
9/25
post-thumbnail

1. Struct

개발자가 커스텀한 자료구조를 의미, 아래와 같이 선언

struct name{
~~
~~
};

1.1. 구조체에서 operator 오버로딩 하기

반드시 < 오퍼레이터를 오버로딩 해주어야 한다. sort() 함수가 < 기준으로 진행되기 때문!

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct my_structure{
    int a, b;
    double c,d,e;
};

struct Point
{
    int x, y;
    Point(int x, int y) : x(x), y(y){}
    Point() {x = -1; y = -1;}

    bool operator < (const Point & other) const{// 항상 조건을 만족해주는 놈이 앞으로 가게 된다고 생각하자
        if (x == other.x) return y > other.y; // y 에 대한 내림 차순 
        return x < other.x; // x 에 대한 오름차순  
    }
};

bool cmp(const Point &a, const Point &b){
    return a.x > b.x; // 내림 차순으로 정렬
}


void print(my_structure s){
    cout << s.a << " " << s.b << " " << s.c << " " << s.d << " " << s.e << endl; 
}

int main(){
    my_structure s = {1,2,3,4,5};
    print(s);
    vector<my_structure> v ; // vector에 담는 것도 가능
    v.push_back(s);
    v.push_back(s);
    for( my_structure s : v) print(s);
    cout << endl;

    vector<Point> v_p;
    v_p.push_back(Point(1,3));
    v_p.push_back(Point(1,2));
    v_p.push_back(Point(3,1));
    v_p.push_back(Point(3,2));
    v_p.push_back(Point(3,3));
    v_p.push_back(Point(10,3));

    sort(v_p.begin(), v_p.end());
    for( Point p : v_p) cout << p.x << " " << p.y << endl;

    sort(v_p.begin(), v_p.end(), cmp); // 이렇게 하는 경우 정의 되지 않은 두번재 기준은 기존의 기준을 따르게 된다. 
    for( Point p : v_p) cout << p.x << " " << p.y << endl;
}

0개의 댓글