기타/C++ 문법

<sort> 오름차순, 내림차순으로 정렬하자

배발자 2022. 1. 14.
반응형

sort() 함수는 algorithm 헤더에 포함되어 있다. 

 

대부분 코딩테스트에서 웬만해선 처음부터 끝까지 정렬을 한 후 문제를 풀게끔 되어 있는 경우가 많다. 

이럴때 sort() 함수가 매우 유용하다. 

 

벡터, 문자열, 배열 모두 sort() 함수를 이용하여 풀 수 있다. 

벡터를 모두 정렬할 때는 sort(v.begin(), v.end()) 

문자열을 모두 정렬할 때도 동일하다. 

배열을 모두 정렬할 때는 sort(arr, arr+10) 라고 정의 할 수 있다. 

배열에서 10의 의미는 처음부터 10개를 정렬하라는 의미이다. 즉, 10이 아니라 5이면 처음부터 5개를 정렬하라는 의미이다. 

다음 코드를 한번 살펴보고 꼭 외우도록 한다. 

#include <algorithm>
using namespace std; 

int main() {

	//벡터일 때
	vector <int> v1 = { 1,3,6,2 };  
	sort(v1.begin(), v1.end()); 
	for (auto x : v1) cout << x <<" ";
	cout << "\n"; 

	//문자열일 때
	string s = "5231";
	sort(s.begin(), s.end()); 
	cout << s <<"\n"; 

	//배열일 때 
	int arr[5] = { 4,2,5,1,2 }; 
	sort(arr, arr + 5);  
	for (auto x : arr)cout << x<<" "; 
	cout << "\n";
 }

 

근데 만약 내림차순으로 정렬하고 싶을 때는 3번째 인자칸에 greater<타입>() 을 적어준다. 

#include <algorithm>
using namespace std; 

int main() {

	//벡터일 때
	vector <int> v1 = { 1,3,6,2 };  
	sort(v1.begin(), v1.end(), greater<int>());
	for (auto x : v1) cout << x <<" ";
	cout << "\n"; 

	//문자열일 때
	string s = "5231";
	sort(s.begin(), s.end(), greater<char>()); 
	cout << s <<"\n"; 

	//배열일 때 
	int arr[5] = { 4,2,5,1,2 }; 
	sort(arr, arr + 5, greater<int>());
	for (auto x : arr)cout << x<<" "; 
	cout << "\n"; 
}

 

또한, 사용자 정의에 의한 정렬도 가능하다. 

sort() 함수의 숨겨진 부분을 쓰는 것인데 정렬의 기준을 자신이 원하는 형태로 설정 할 수 있다. 

compare() 함수를 생성하여 sort()의 세번째 인자 값으로 넣으면, bool 함수의 반환 값에 의해서 정렬이 동작한다. 

만약 "greater<타입>()" 가 기억이 안난다면 다음과 같은 코드를 작성하여 내림차순으로 정렬할 수 있다. 

#include <algorithm>
using namespace std; 
bool comp(int x1, int x2) {
	return x1 > x2;
}
int main() {
	vector <int> v = { 5,4,2,1,3 }; 
	sort(v.begin(), v.end(), comp); 

	for (auto x : v)cout << x << " "; 
}

즉, 두 개의 데이터를 비교할 때 왼쪽에 있는 것이 크도록 정렬 한다는 뜻이다. 

 

반응형

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

<priority_queue> 자료구조  (0) 2022.01.14
<map> 자료구조  (0) 2022.01.14
<sqrt> 제곱근(루트)  (0) 2022.01.13
<abs> 절댓값 반환  (0) 2022.01.13
<next_permutation> 모든 경우의 수 정렬  (0) 2022.01.13

댓글