알고리즘 스터디에서 발표를 맡은 문제 중 다른 코드를 참고해 좀 특이한 방식으로 sort 함수 비교 부분을 커스터마이징한 코드가 있었다. 필자도 이번에 처음 본 작성 방식이라 정리해두면 좋을 것 같아 포스팅을 하게됐다.
기본 세팅
#include <algorithm>
위 헤더파일을 include해야 sort 함수를 사용할 수 있다.
compare 커스터마이징 사용안할 시 sort 함수
vector <int> v(6,6);
sort(v.begin(),v.end());
첫 번째 인자로 정렬을 시작할 부분의 iterator 혹은 포인터를 넣어주고
두 번째 인자로 정렬의 끝인 부분의 iterator 혹은 포인터를 넣어주면 된다.
참고로, 알고리즘 헤더파일을 삽입해 사용하는 sort 함수는 quick sort와 insertion sort를 섞은 intro sort를 사용한다.
해당 함수의 시간 복잡도는 평균 nlogn, 최악일 경우 n^2이다.
compare 커스터마이징 사용할 시 sort 함수 type 1
vector <int> v(6,6);
bool compare(int i, int j) { return i > j; }
sort(v.begin(),v.end(),compare);
첫 번째 인자와 두 번째 인자는 동일하며 세 번째 인자로 커스터마이징한 compare 함수를 넣어준다.
함수명이 compare일 필요는 없다.
예시로 적은 위 코드는 내림차순으로 정렬되는 코드이다.
compare 커스터마이징 사용할 시 sort 함수 type 2
이 포스팅을 하게 된 계기는 아래 코드인데 배열 하나에서의 값들만 비교해서 정렬을 해주는 것이 아니라
다른 배열의 값을 기준으로 정렬을 할 수도 있다.
또한, 함수를 따로 분리하여 작성하지 않아도 sort 함수 내에서 아래와 같이 작성가능하다.
이때 주의해야되는 점이 c++14 이상 버전에서만 문제 없이 빌드된다.
vector<int> a[10000000];
vector<int> order(n);
for (int i=0; i<n; i++) {
sort(a[i].begin(), a[i].end(), [&](const int &k, const int &l) {
return order[k] < order[l];
});
}
참고 사이트
'프로그래밍 언어 > c++' 카테고리의 다른 글
[Algorithm] c++ 순열 구하는 함수 next_permutation, prev_permutation (0) | 2022.05.04 |
---|---|
[STL] 덱(Deque) (0) | 2021.10.12 |
[STL] 큐(Queue) (0) | 2021.10.11 |
[STL] vector 컨테이너 (0) | 2021.09.19 |
STL (0) | 2021.09.19 |