과거 자료
[#2] header <algorithm> - sort 함수
Fuji
2022. 8. 28. 14:54
sort 함수 원형
// #1
template<class RandomAccessIterator>void
sort(RandomAccessIterator first, RandomAccessIterator last);
// #2
template<class RandomAccessIterator, class Compare>void
sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp);
- #1
배열의 시작 주소, iterator의 begin(), 배열의 끝 주소인 end()를 매개변수로 받는다. - #2
iterator의 begin, end와 추가로 Compare 함수를 매개변수로 넘겨받는다. - Compare 함수란?
Sort 라이브러리의 참 거짓 관계를 재정의하는 사용자 정의 함수이다
오름차순 정렬
// 2차원 벡터 선언
vector<vector<int>> v(5, vector<int>(2));
/* input >> v
3 4
1 1
1 -1
2 2
3 3
*/
sort(v.begin(), v.end()); // 오름차순 정렬
PrintArr(v, 5); // 출력
/* output << v
1 -1
1 1
2 2
3 3
3 4
*/
내림차순 정렬
// greater<자료형>() 클래스를 인수로 넘겨줌
sort(v.begin(), v.end(), greater<vector<int>>());
Compare 함수
bool Compare(vector<int>& A, vector<int>& B)
{
if (A[1] == B[1])
return A[0] < B[0];
return A[1] < B[1];
}
int main(void)
{
int i = 0, j = 0;
int n = 0;
cin >> n;
vector<vector<int>> v(n, vector<int>(2));
InputArr(v, n); // Input
sort(v.begin(), v.end(), Compare);
PrintArr(v, n); // Output
return 0;
}
https://www.acmicpc.net/problem/11651
위 문제를 풀면서 Compare를 적용한 코드이다. 비교 대상이 되는 두 원소에 대해 참 거짓 관계를 사용자가 직접 정의할 수 있다. 위에 코드는 y값이 동일할 경우 x값을 오름차순으로 정렬하는 코드이다. compare 함수는 두 원소의 대소관계를 비교 한 후 bool 값을 리턴한다.