쌓고 쌓다

[C++] 정렬(sort 함수), compare 함수 만들기(정렬 기준 만들기) 본문

프로그래밍/C & C++

[C++] 정렬(sort 함수), compare 함수 만들기(정렬 기준 만들기)

승민아 2022. 7. 12. 01:58

 

 

sort 함수는 #include <algorithm>을 해줘야 사용이 가능하다.

sort 함수는 기본이 오름차순 정렬이다.

 

오름차순 정렬(기본)

vector<int> v;
v.push_back(1);	v.push_back(3);
v.push_back(5); v.push_back(2);
v.push_back(4);

sort(v.begin(), v.end());

실행 결과 ( 오름차순 )

 

+ compare 함수(정렬 기준 함수 이용) 이용해서 오름차순 정렬

bool comp(int a, int b)
{
	if (a < b)
		return true;
	else
		return false;
}

sort(v.begin(), v.end(),comp);

compare 함수를 만들 때 왼쪽(int a)을 기준으로 오른쪽(int b)와 비교 연산자를 이용해

자신이 원하는 방향으로 구현하면 된다.

위의 예는 a < b 가 true이므로 a(왼쪽)가 작게 정렬이 된다.

 

실행 결과 ( compare 오름차순 )

 

 

 

 


내림차순 정렬

vector<int> v;
v.push_back(1);	v.push_back(3);
v.push_back(5); v.push_back(2);
v.push_back(4);

sort(v.begin(), v.end(), greater<>());

실행 결과 (내림차순)

 

 

+ compare 함수(정렬 기준 함수 이용) 이용해서 내림차순 정렬

bool comp(int a, int b)
{
	if (a > b)
		return true;
	else
		return false;
}
sort(v.begin(), v.end(),comp);

위의 오름차순 compare 함수를 만들 때 설명하였듯이 왼쪽(int a)이 커야 하니

a > b 가 true로 코드를 작성하면 된다.

 

실행 결과 (compare 내림차순)

 

 


+ pair<int,int> 정렬 기준 만들기

int 쌍 (x, y)을 가지는 자료형을 정렬해보고자 한다.

x를 기준으로 오름차순으로 정렬하는데 만약 x가 같다면 y가 작은애가 먼저 나온다고 하자.

즉, x 도 오름차순이고 같다면 y도 오름차순으로 정렬할 것이다.

 

compare 함수

bool comp(pair<int,int> a, pair<int,int> b)
{
	if (a.first < b.first)
		return true;
	else if (a.first == b.first)
	{
		if (a.second < b.second)
			return true;
		else
			return false;
	}
	else
		return false;
}

 

main문

vector<pair<int,int>> v;
v.push_back(make_pair(1, 5));		v.push_back(make_pair(1, 3));
v.push_back(make_pair(2, 1));		v.push_back(make_pair(1, 6));
v.push_back(make_pair(5, 5));

sort(v.begin(), v.end(),comp);

 

실행 결과

 

이런 식으로 원하는 대로 정렬 기준을 만들어 정렬이 가능하다.

Comments