쌓고 쌓다
[C++] 정렬(sort 함수), compare 함수 만들기(정렬 기준 만들기) 본문
sort 함수는 #include <algorithm>을 해줘야 사용이 가능하다.
sort 함수는 기본이 오름차순 정렬이다.
오름차순 정렬(기본)
vector<int> v;
v.push_back(1); v.push_back(3);
v.push_back(5); v.push_back(2);
v.push_back(4);
sort(v.begin(), v.end());
실행 결과 ( 오름차순 )
+ compare 함수(정렬 기준 함수 이용) 이용해서 오름차순 정렬
bool comp(int a, int b)
{
if (a < b)
return true;
else
return false;
}
sort(v.begin(), v.end(),comp);
compare 함수를 만들 때 왼쪽(int a)을 기준으로 오른쪽(int b)와 비교 연산자를 이용해
자신이 원하는 방향으로 구현하면 된다.
위의 예는 a < b 가 true이므로 a(왼쪽)가 작게 정렬이 된다.
실행 결과 ( compare 오름차순 )
내림차순 정렬
vector<int> v;
v.push_back(1); v.push_back(3);
v.push_back(5); v.push_back(2);
v.push_back(4);
sort(v.begin(), v.end(), greater<>());
실행 결과 (내림차순)
+ compare 함수(정렬 기준 함수 이용) 이용해서 내림차순 정렬
bool comp(int a, int b)
{
if (a > b)
return true;
else
return false;
}
sort(v.begin(), v.end(),comp);
위의 오름차순 compare 함수를 만들 때 설명하였듯이 왼쪽(int a)이 커야 하니
a > b 가 true로 코드를 작성하면 된다.
실행 결과 (compare 내림차순)
+ pair<int,int> 정렬 기준 만들기
int 쌍 (x, y)을 가지는 자료형을 정렬해보고자 한다.
x를 기준으로 오름차순으로 정렬하는데 만약 x가 같다면 y가 작은애가 먼저 나온다고 하자.
즉, x 도 오름차순이고 같다면 y도 오름차순으로 정렬할 것이다.
compare 함수
bool comp(pair<int,int> a, pair<int,int> b)
{
if (a.first < b.first)
return true;
else if (a.first == b.first)
{
if (a.second < b.second)
return true;
else
return false;
}
else
return false;
}
main문
vector<pair<int,int>> v;
v.push_back(make_pair(1, 5)); v.push_back(make_pair(1, 3));
v.push_back(make_pair(2, 1)); v.push_back(make_pair(1, 6));
v.push_back(make_pair(5, 5));
sort(v.begin(), v.end(),comp);
실행 결과
이런 식으로 원하는 대로 정렬 기준을 만들어 정렬이 가능하다.
'프로그래밍 > C & C++' 카테고리의 다른 글
openGL(GL, GLU, GLUT) 설치 방법 (0) | 2022.11.12 |
---|---|
[C++] map에서 [ ] 사용시 주의할 점 (0) | 2022.10.09 |
[C++] 배열 초기화 - fill 함수 (0) | 2022.07.09 |
[C++] 역순 만들기(뒤집기) reverse 함수 (0) | 2022.07.09 |
[C++] vector erase (0) | 2022.06.30 |
Comments