C++
[C++] set STL에서 class 정렬 기준 바꾸기
슥지니
2022. 8. 20. 05:14
반응형
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 |
반응형