고민은 하고 오셨나요? 혹은.. 바로 아셨을 지도 모르겠습니다.
그럼 바로 본론으로 들어가겠습니다.
#include <functional> ///< 이 헤더파일은 greater를 사용하기 위해 필요합니다.
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 | #include <iostream> #include <vector> #include <algorithm> #include <functional> using namespace std; int main() { vector<int> a; int b = 0; for (int i = 0; i < 5; i++) { cin >> b; a.push_back(b); } sort(a.begin(), a.end()); for (int i = 0; i < 5; i++) { cout << a[i] << endl; } sort(a.begin(), a.end(), greater<int>()); for (int i = 0; i < 5; i++) { cout << a[i] << endl; } return 0; } | cs |
이 전 포스트와는 다르게 23줄의 sort 형태가 달라진 것을 보실 수 있을 것입니다.
sort함수의 3번째 인자에는 특수한 형태의 함수를 넣으면 그에 따른 정렬을 할 수 있습니다.
이것은 int형 뿐만 아니라 객체의 비교도 가능하도록 하는 강력한 기능이 될 수 있습니다.!
아래의 예는 소스의 일부를 가져온 것입니다. 다음의 소스 코드로 설명하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | bool sorting(const uint8 direction) { if (direction == SORT_DIRECTION_FORWARD) { sort(_logList.begin(), _logList.end(), LogManager::ascComp); } else if (direction == SORT_DIRECTION_BACKWARD) { sort(_logList.begin(), _logList.end(), LogManager::descComp); } } bool ascComp(const Log* log1, const Log* log2) { return (log1->number() < log2->number()); } bool descComp(const Log* log1, const Log* log2) { return (log1->number() > log2->number()); } | cs |
11 ~ 17 줄은 용도에 따라서 새롭게 정의한 비교 함수라고 생각하시면 될 것입니다.
number()라는 함수는 log객체의 멤버변수인 number를 가져오는 get 함수라고 생각하시면 됩니다.
따라서 새롭게 정의한 함수는 두 log의 객체를 비교하여, bool 값을 리턴하는 형식으로 이루어져 있습니다.
이러한 방식을 사용한다면, 기본 데이터 형뿐만 아니라 객체끼리도 비교하여, 객체가 들어있는 벡터도
비교할 수 있습니다.
여러분도 한번 응용해서 사용해보세요! 쉬운 sort 기능이니까요!
그럼 다음에 봐요~
'프로그래밍' 카테고리의 다른 글
[c++ 정복하자] 목차 (0) | 2017.05.13 |
---|---|
[STL] Vector 정리 (0) | 2017.04.14 |
STL vector sort(벡터 정렬) (1) (1) | 2017.04.08 |
STL Vector정리(1) (0) | 2017.04.08 |
mutable 키워드 (0) | 2017.03.25 |
댓글