sort 사용하기
sort는 말 그대로 정렬을 시켜주는 것이다. 가장 큰 장점은 그 상황에 맞는 가장 적절한 방법으로 정렬을 시켜주기 때문에 효율적이라고 합니다.sort의 몇가지 특징을 써보자면
1. #include <algorithm> 에 포함되어 있습니다.
2. 정렬 설정을 하는 여러 방법이 있습니다. 디폴트 값은 오름 차순입니다.
3. 정렬을 하는 방법으로는 연산자 오버로딩과 비교함수를 만드는 경우등이 있습니다.
4. 비교함수를 만들때 주의점은 const 를 사용해야하고 & 연산자를 사용해야 합니다 왜냐하면 비교를 하는 과정에서는 값의 수정이나 변경이 없다라고 가정하고 단순 비교만 하기 때문입니다.
비교함수를 사용하여서 sort 사용하기
<단순 비교 함수>
1 2 3 4 5 6 7 | //---------------------------------------- // 내림차순을 위한 비교함수 //---------------------------------------- bool cmp(const int &u, const int &v) { return u > v; } | cs |
비교함수를 사용하면 좀 더 다양한 방법으로의 정렬이 가능합니다. 위의 코드는 단순이 내림차순의 정렬을 가능하게 합니다. 여기서 중요한 것은 앞에있는 u와 v의 관계인데 간략히 설명하자면 u 다음에 나오는게 v 라고 생각하는게 쉽게 이해할수 있습니다. 즉 여기서 return 값이 true면 바꾸고 false면 그대로 가는 것입니다. 그래서 위의 코드로 설명하자면 u 다음에 v가 나오는데 u > v 가 크다면 둘이 바꿔라 입니다. 즉 큰수를 먼저 나오게 해라라고도 판단하면 됩니다.
<구조체 비교 함수>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | //----------------------------------------- // 구조체를 위한 비교 함수 //----------------------------------------- struct Point { int x, y; }; bool cmp(const Point &u, const Point &v) { if (u.x < v.x) { return true; } else if (u.x == v.x) { return u.y < v.y; } else { return false; } } | cs |
위의 비교함수는 구조체인 point의 비교함수를 위한 정렬방법으로 일단 x를 오름차순으로 정렬하고 그 후에 만약 x가 같다면 y를 오름차순으로 정렬하라는 코드입니다.
코드
단순한 비교함수와 구조체를 이용한 비교함수를 코드로 구성해 보았습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include <stdio.h> #include <algorithm> using namespace std; //----------------------------------------- // 일반 비교 함수 //----------------------------------------- bool cmp(const int &u, const int &v) { return u > v; } //----------------------------------------- // 구조체를 위한 비교 함수 //----------------------------------------- struct Point { int x, y; }; bool cmpPoint(const Point &u, const Point &v) { if (u.x < v.x) { return true; } else if (u.x == v.x) { return u.y < v.y; } else { return false; } } int main(void){ //----------------------------------------- // 단순 오름차순 정렬 //----------------------------------------- int a[5] = { 5, 3, 2, 1, 4 }; sort(a, a + 5); //----------------------------------------- // 비교 함수를 사용한 정렬 //----------------------------------------- sort(a, a + 5,cmp); //----------------------------------------- // 구조체 비교함수를 사용한 정렬 //----------------------------------------- Point C[5]; for (int i = 0; i < 5; i++) { Point temp; temp.x = i % 3; temp.y = (i + 1) % 4; C[i] = temp; } sort(C, C + 5, cmpPoint); return 0; } | cs |
'Algorithm > 이론' 카테고리의 다른 글
[알고리즘] 이분 탐색 (0) | 2016.04.06 |
---|---|
[STL] vector 사용하기 (0) | 2016.04.04 |
[STL] pair 사용하기 (1) | 2016.04.04 |
[조합] nCr 쉽게 구하기. (수정 20190604) (5) | 2016.04.03 |
[그래프의 표현] 인접 리스트 (0) | 2016.04.01 |
댓글