sort 함수를 알고리즘 문제를 풀다가 정렬할 때 마다 쓰는데
내림차순을 원하거나 second 값으로 오름차순을 하길 원할 때 compare 함수를 어떻게 짜야하는지 맨날 헷갈린다.
그래서 포스팅해둠.
sort 함수는 algorithm 헤더파일을 필요로 한다.
sort(시작 주소, 종료 주소, [비교함수])
비교함수는 생략이 가능하다.
생략시에는 오름차순으로 정렬된다.
sort 함수
compare 함수대신
greater<int>(), less(int>() 들도 사용한다고 하는데 아직 한 번도 안 써봤다...
이 때,
sort(&arr[0], &arr[N], compare);
이렇게 써주어도 된다.
정렬되는 범위가 시작 주소는 포함하고 종료 주소는 포함이 되지 않는다고 한다.
즉, 위 함수 정렬의 범위는 arr[0], arr[1], ... ,arr[9] 가 된다. arr[10]은 정렬 범위에 포함되지 않는다.
비교 함수
first 값으로 내림차순 하되 만약 first 값이 같다면 second 값으로 내림차순 하게 만들어준다.
비교함수는 순서가 올바른 경우는 true를, 올바르지 않는 경우는 false를 반환해준다.
처음에 pair를 몇 개(N) 입력 받을 것인지 입력받고
N만큼 pair 쌍을 입력 받은 뒤
정렬한 결과를 출력하는 프로그램을 짜보았다.
실행 결과
전체 소스보기 : https://gist.github.com/fpdjsns/4ee81897968d864fe1928ac231ce8e94
참고로 처음엔 first 값으로 오름차순을 한 뒤 first 값이 크면 second값으로 오름차순을 하는 함수를 짰었는데
(그래서 미리보기 설명에 ascending order라고 적혀있음)
위 compare 함수로
sort(arr, arr+N, compare) 한 결과나
sor(arr, arr+N) 한 결과나
결과가 같게 나온다...
first 값이 같으면 second 값으로 오름차순 하는게 default로 되어있나..?
보아하니 pair를 사용한 경우에는 sort함수를 사용하는데 문제 없게 작동하나 보다.
sort(arr, arr+N) 실행 결과
제목은 pair를 sort함수로 내림차순 정렬하는 방법이지만
원리만 이해한다면 원하는 구조체 배열 같은 경우도 쉽게 정렬할 수 있다.
+ vector 정렬
vector<int> v;
sort(v.begin(), v.end());
sort(v.begin(), v.end(), [](int& a, int& b){ return a > b; });
'기타' 카테고리의 다른 글
[AE] After Effects 폰트 추가 (0) | 2020.12.31 |
---|---|
[Python][Error] urlretrieve 호출 시 encode_chunked=req.has_header('Transfer-encoding') 에러 (0) | 2019.07.01 |
[Gradle] :compileQuerydsl task error (0) | 2019.05.10 |
[Error][Intellij] available for offline mode (0) | 2019.04.26 |
[Intellij] Macro(매크로) 등록 (0) | 2019.01.15 |
댓글