개발바닥

C++ sort 비교 함수 본문

개인 공부

C++ sort 비교 함수

라이언 2020. 3. 27. 15:50
반응형

C++ algorithm 헤더 파일에 있는 sort 정렬 방법에 대해서 알아보겠습니다.

 

sort() 함수는 Default로 오름차순 정렬을 한다.

 

배열의 경우

첫번째 인자 시작지점 = 배열의 포인터

두번째 인자 끝나는지점 +1 = 배열의 포인터 + 배열의 크기

 

벡터의 경우

첫번째 인자 시작지점 = iterator의 begin()

두번째 인자 끝나는지점 +1 = iterator의 end()

 

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

typedef struct {
	int x;
	int y;
}Point;

//const와 &를 통해서 레퍼런스로 받아오는걸 잊지말자.
//내림차순 정렬
bool cmp(const int &a, const int &b) {
	if (a > b) return true;
	else return false;
}

//const와 &를 통해서 레퍼런스로 받아오는걸 잊지말자.
//x순으로 정렬하고 x값이 같으면 y순으로 각각 오름차순으로 정렬
bool cmp_asc(const Point &a, const Point &b) {
	if (a.x < b.x) return true;
	else if (a.x == b.x) {
		if (a.y <= b.y) return true;
		else return false;
	}
	else return false;
}

//const와 &를 통해서 레퍼런스로 받아오는걸 잊지말자.
//x순으로 정렬하고 x값이 같으면 y순으로 각각 내림차순으로 정렬
bool cmp_desc(const Point &a, const Point &b) {
	if (a.x > b.x) return true;
	else if (a.x == b.x) {
		if (a.y > b.y)return true;
		else return false;
	}
	else return false;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int arr[5] = { 5,2,1,4,3 };
	vector<int> arr_v;
	vector<Point> arr_v_pos;
	
	arr_v.push_back(5);
	arr_v.push_back(2);
	arr_v.push_back(1);
	arr_v.push_back(4);
	arr_v.push_back(3);
	
	arr_v_pos.push_back({ 1,4 });
	arr_v_pos.push_back({ 2,5 });
	arr_v_pos.push_back({ 1,1 });
	arr_v_pos.push_back({ 1,3 });
	arr_v_pos.push_back({ 3,5 });
	cout << "===========정렬 전=============\n";
	for (auto n = arr_v.begin(); n != arr_v.end(); n++) {
		cout << *n << ' ';
	}cout << '\n';
	for (auto pos = arr_v_pos.begin(); pos != arr_v_pos.end(); pos++) {
		cout << pos->x << ' ' << pos->y << '\n';
	}
	cout << "===========Array 오름 차순 정렬=============\n";
	sort(arr, arr + 5);
	for (auto n = arr; n != arr+5; n++) {
		cout << *n << ' ';
	}cout << '\n';

	cout << "===========Vector 오름 차순 정렬=============\n";
	//오름 차순 정렬
	sort(arr_v.begin(), arr_v.end());
	for (auto n = arr_v.begin(); n != arr_v.end(); n++) {
		cout << *n << ' ';
	}cout << '\n';
	cout << "===========Array 내림 차순 정렬=============\n";
	sort(arr, arr + 5,cmp);
	for (auto n = arr; n != arr + 5; n++) {
		cout << *n << ' ';
	}cout << '\n';

	cout << "===========Vector 내림 차순 정렬=============\n";
	//내림 차순 정렬
	sort(arr_v.rbegin(), arr_v.rend());
	for (auto n = arr_v.begin(); n != arr_v.end(); n++) {
		cout << *n << ' ';
	}cout << '\n';

	cout << "===========Vector Point 오름 차순 정렬=============\n";
	//오름 차순 정렬
	sort(arr_v_pos.begin(), arr_v_pos.end(),cmp_asc);
	for (auto pos = arr_v_pos.begin(); pos != arr_v_pos.end(); pos++) {
		cout << pos->x << ' ' << pos->y << '\n';
	}
	
	cout << "===========Vector Point 내림 차순 정렬=============\n";
	//내림 차순 정렬
	sort(arr_v_pos.begin(), arr_v_pos.end(), cmp_desc);
	for (auto pos = arr_v_pos.begin(); pos != arr_v_pos.end(); pos++) {
		cout << pos->x << ' ' << pos->y << '\n';
	}


	return 0;
}

결과 화면

반응형

'개인 공부' 카테고리의 다른 글

C++ 반복자(Iterator)  (0) 2020.03.27
C++ 소수점 출력하기  (0) 2020.03.27
Comments