반응형

set은 default로 오름차순으로 정렬되도록 구현이 되어있습니다. 

 

set에 type으로 class를 사용할 때 정렬 기준을 바꾸려면 set의 두 번째 인자로 operator()를 오버로딩한 구조체를 넘겨주면 됩니다.

 

예를 들어 다음과 같은 person class가 있다고 했을 때

1
2
3
4
5
6
7
8
9
class person{
public:
    int height;
    int weight;
    person(int height, int weight) {
        this->height = height;
        this->weight = weight;
    }
};
cs

set의 원소가 다음과 같은 조건을 만족하도록 정렬하고 싶으면

 

1. height가 작은 순서대로 정렬

2. height가 같으면 weight가 낮은 순서대로 정렬

 

다음과 같이 cmp 구조체를 만들면 됩니다. 

1
2
3
4
5
6
7
8
9
struct cmp {
   bool operator()(const person& a, const person& b) const{
        if (a.height == b.height) {
            return a.weight < b.weight;
        }
        return a.height < b.height;
    }
 
};
cs

 

 구현한 cmp 구조체를 set에 적용하려면 다음과 같이 set을 선언할 때 두 번째 인자로 cmp를 넘겨주면 됩니다.

1
 set<person, cmp> s;
cs

 

 
반응형

+ Recent posts