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 값을 리턴한다.