반응형
sort() 함수는 algorithm 헤더에 포함되어 있다.
대부분 코딩테스트에서 웬만해선 처음부터 끝까지 정렬을 한 후 문제를 풀게끔 되어 있는 경우가 많다.
이럴때 sort() 함수가 매우 유용하다.
벡터, 문자열, 배열 모두 sort() 함수를 이용하여 풀 수 있다.
벡터를 모두 정렬할 때는 sort(v.begin(), v.end())
문자열을 모두 정렬할 때도 동일하다.
배열을 모두 정렬할 때는 sort(arr, arr+10) 라고 정의 할 수 있다.
배열에서 10의 의미는 처음부터 10개를 정렬하라는 의미이다. 즉, 10이 아니라 5이면 처음부터 5개를 정렬하라는 의미이다.
다음 코드를 한번 살펴보고 꼭 외우도록 한다.
#include <algorithm>
using namespace std;
int main() {
//벡터일 때
vector <int> v1 = { 1,3,6,2 };
sort(v1.begin(), v1.end());
for (auto x : v1) cout << x <<" ";
cout << "\n";
//문자열일 때
string s = "5231";
sort(s.begin(), s.end());
cout << s <<"\n";
//배열일 때
int arr[5] = { 4,2,5,1,2 };
sort(arr, arr + 5);
for (auto x : arr)cout << x<<" ";
cout << "\n";
}
근데 만약 내림차순으로 정렬하고 싶을 때는 3번째 인자칸에 greater<타입>() 을 적어준다.
#include <algorithm>
using namespace std;
int main() {
//벡터일 때
vector <int> v1 = { 1,3,6,2 };
sort(v1.begin(), v1.end(), greater<int>());
for (auto x : v1) cout << x <<" ";
cout << "\n";
//문자열일 때
string s = "5231";
sort(s.begin(), s.end(), greater<char>());
cout << s <<"\n";
//배열일 때
int arr[5] = { 4,2,5,1,2 };
sort(arr, arr + 5, greater<int>());
for (auto x : arr)cout << x<<" ";
cout << "\n";
}
또한, 사용자 정의에 의한 정렬도 가능하다.
sort() 함수의 숨겨진 부분을 쓰는 것인데 정렬의 기준을 자신이 원하는 형태로 설정 할 수 있다.
compare() 함수를 생성하여 sort()의 세번째 인자 값으로 넣으면, bool 함수의 반환 값에 의해서 정렬이 동작한다.
만약 "greater<타입>()" 가 기억이 안난다면 다음과 같은 코드를 작성하여 내림차순으로 정렬할 수 있다.
#include <algorithm>
using namespace std;
bool comp(int x1, int x2) {
return x1 > x2;
}
int main() {
vector <int> v = { 5,4,2,1,3 };
sort(v.begin(), v.end(), comp);
for (auto x : v)cout << x << " ";
}
즉, 두 개의 데이터를 비교할 때 왼쪽에 있는 것이 크도록 정렬 한다는 뜻이다.
반응형
'기타 > C++ 문법' 카테고리의 다른 글
<priority_queue> 자료구조 (0) | 2022.01.14 |
---|---|
<map> 자료구조 (0) | 2022.01.14 |
<sqrt> 제곱근(루트) (0) | 2022.01.13 |
<abs> 절댓값 반환 (0) | 2022.01.13 |
<next_permutation> 모든 경우의 수 정렬 (0) | 2022.01.13 |
댓글