sort(처음, 마지막 커스텀비교함수)
마지막은 last를 포함하지 않는다.(즉, 실제 정렬하고 싶은 크기 + 1까지 해야한다.)
커스텀비교함수
1. less<원소 타입>() : 오름차순 정렬
2. greater<원소 타입>() : 내림차순 정렬
3. 직접 정의하면 됨
pair<int, int>, tuple<int, int, int> 원소를 둔다면 first, second, third 순으로 정렬된다.
코드
#include<bits/stdc++.h>
using namespace std;
vector<int> a;
int b[5];
vector<pair<int, int>> v;
bool cmp(pair<int, int> a, pair<int, int> b)
{
return a.first > b.first;
}
int main()
{
for(int i = 5; i >= 1; i--) b[i - 1] = i;
for(int i = 5; i >= 1; i--) a.push_back(i);
// 오름차순
sort(b, b + 5);
sort(a.begin(), a.end());
for(int i : b) cout << i << ' ';
cout << "\n";
for(int i : a) cout << i << ' ';
cout << "\n";
sort(b, b + 5,less<int>());
sort(a.begin(), a.end(), less<int>());
for(int i : b) cout << i << ' ';
cout << "\n";
for(int i : a) cout << i << ' ';
cout << "\n" << "\n" << "\n";
// 내림차순
sort(b, b + 5, greater<int>());
sort(a.begin(), a.end(), greater<int>());
for(int i : b) cout << i << ' ';
cout << "\n";
for(int i : a) cout << i << ' ';
cout << "\n" << "\n" << "\n";
// Pair 커스텀 정렬
for (int i = 10; i >= 1; i--) v.push_back({i, 10 -i});
sort(v.begin(), v.end(), cmp); // 커스텀비교함수에 직접 정의 함수 넣음
for (pair<int, int> it : v) cout << it.first << " : " << it.second << "\n";
return 0;
}
Pair 정렬(이렇게도 가능)
#include<bits/stdc++.h>
using namespace std;
vector<pair<int, int>> v;
int main()
{
for(int i= 1; i <= 6; i++) v.push_back({i, i});
// pair 정렬
sort(v.begin(), v.end(), greater<pair<int, int>>());
for (pair<int, int> it : v) cout << it.first << " : " << it.second << "\n";
return 0;
}
/*
6 : 6
5 : 5
4 : 4
3 : 3
2 : 2
1 : 1
*/
'C++ > 기본 문법' 카테고리의 다른 글
<C++> 정적 배열(Array) (0) | 2022.04.12 |
---|---|
<C++> vector (0) | 2022.04.12 |
<C++> pair 와 tuple (0) | 2022.04.12 |
C++ 람다식 (0) | 2022.02.23 |
변수(Variable) (0) | 2021.08.31 |