본문 바로가기

C++/기본 문법

<C++> sort

sort(처음, 마지막 커스텀비교함수)

마지막은 last를 포함하지 않는다.(즉, 실제 정렬하고 싶은 크기 + 1까지 해야한다.)

 

커스텀비교함수

1. less<원소 타입>() : 오름차순 정렬

2. greater<원소 타입>() : 내림차순 정렬

3. 직접 정의하면 됨

 

pair<int, int>, tuple<int, int, int> 원소를 둔다면 first, second, third 순으로 정렬된다.

 

 

코드


#include<bits/stdc++.h>
using namespace std;
vector<int> a;
int b[5];
vector<pair<int, int>> v;

bool cmp(pair<int, int> a, pair<int, int> b)
{
	return a.first > b.first;
}
		
int main()
{
	for(int i = 5; i >= 1; i--) b[i - 1] = i;
	for(int i = 5; i >= 1; i--) a.push_back(i);
	
	// 오름차순 
	sort(b, b + 5);
	sort(a.begin(), a.end());
	for(int i : b) cout << i << ' ';
	cout << "\n";
	for(int i : a) cout << i << ' ';
	cout << "\n";
	
	sort(b, b + 5,less<int>());
	sort(a.begin(), a.end(), less<int>());
	for(int i : b) cout << i << ' ';
	cout << "\n";
	for(int i : a) cout << i << ' ';
	cout << "\n" << "\n" << "\n";
	
	
	// 내림차순 
	sort(b, b + 5, greater<int>());
	sort(a.begin(), a.end(), greater<int>());
	for(int i : b) cout << i << ' ';
	cout << "\n";
	for(int i : a) cout << i << ' ';
	cout << "\n" << "\n" << "\n";
	
	// Pair 커스텀 정렬
	for (int i = 10; i >= 1; i--) v.push_back({i, 10 -i});
	sort(v.begin(), v.end(), cmp); // 커스텀비교함수에 직접 정의 함수 넣음
	
	for (pair<int, int> it : v) cout << it.first << " : " << it.second << "\n";
	
	return 0;
}
 

 

Pair 정렬(이렇게도 가능)


#include<bits/stdc++.h>
using namespace std;
vector<pair<int, int>> v;
	
int main()
{
	for(int i= 1; i <= 6; i++) v.push_back({i, i});

	// pair 정렬
	sort(v.begin(), v.end(), greater<pair<int, int>>()); 
	for (pair<int, int> it : v) cout << it.first << " : " << it.second << "\n";
	
	return 0;
}

/*
6 : 6
5 : 5
4 : 4
3 : 3
2 : 2
1 : 1
*/

 

'C++ > 기본 문법' 카테고리의 다른 글

<C++> 정적 배열(Array)  (0) 2022.04.12
<C++> vector  (0) 2022.04.12
<C++> pair 와 tuple  (0) 2022.04.12
C++ 람다식  (0) 2022.02.23
변수(Variable)  (0) 2021.08.31