record logo record

sort() 함수의 기본 사용법1

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

int main(void){
	int a[10] = {9, 3, 2, 5, 4, 6, 7, 8, 1, 10};
	sort(a, a+10);
	for(int i = 0; i < 10; i++){
		cout << a[i] << ' ';
	}
	return 0;
}

sort() 함수를 살펴보면 배열의 시작점 주소와 마지막 주소를 넣어줬음을 볼 수 있다. 위의 함수를 실행하고 나면 오름차순으로 정렬된 배열을 출력하는것을 볼 수 있다.

sort() 함수의 기본 사용법2

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

bool compare(int a, int b){
	return a > b;
}

int main(void){
	int a[10] = {9, 3, 2, 5, 4, 6, 7, 8, 1, 10};
	sort(a, a+10, compare);
	for(int i = 0; i < 10; i++){
		cout << a[i] << ' ';
	}
	return 0;
}

sort() 함수를 살펴보면 sort()의 세 번째 인자 값으로 compare()함수를 만들어서 넣어줬음을 볼 수 있다. 위와 같이 정렬의 기준을 자신이 원하는 형태로 설정할 수 있다.

sort() 함수의 기본 사용법3

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

class Student {
	public:
		string name;
		int score;
		Student(string name, int score){
			this->name = name;
			this->score = score;
		}
		// 정렬 기준 점수가 낮은 순서 
		bool operator < (Student &student){
			return this->score < student.score;
		}
};

int main(void){
	Student students[] = {
		Student("김길동", 90),
		Student("이길동", 10),
		Student("박길동", 30),
		Student("나길동", 80)
	};
	
	sort(students, students + 4);
	
	for(int i=0; i<4; i++){
		cout << students[i].name << ' ';
	} 
	return 0;
}

sort() 함수의 기본 사용법4

변수가 2개일 때 ‘한 개’의 변수를 기준으로 정렬하는 방법

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

int main(void){
	vector<pair<int, string> > v;
	v.push_back(pair<int, string>(70, "김길동"));
	v.push_back(pair<int, string>(80, "유길동"));
	v.push_back(pair<int, string>(75, "박길동"));
	v.push_back(pair<int, string>(90, "이길동"));
	v.push_back(pair<int, string>(67, "학길동"));
	
	
	sort(v.begin(), v.end());
	
	for(int i = 0; i < v.size(); i++){
		cout << v[i].second << ' ';
	} 
	return 0;
}

위 소스코드는 벡터(Vector) 라이브러리와 페어(Pair) 라이브러리를 이용해 클래스를 정의했던 방식을 변경한것이다. 이렇게 소스코드의 길이를 짧게 해주는 기법을 숏코딩(Short Coding)이라고 한다. 작성한 소스코드의 시간 복잡도가 동일하다면, 프로그래밍 대회에서는 소스코드가 짧을 수록 남들보다 앞설수 있다.

sort() 함수의 기본 사용법4-1

#include <bits/stdc++.h>
using namespace std;

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

int main(void) {

	vector<pair<int, string> > v;
	v.push_back(make_pair(1000, "a"));
	v.push_back(make_pair(300, "b"));
	v.push_back(make_pair(700, "c"));
	v.push_back(make_pair(250, "e"));
    v.push_back(make_pair(300, "g"));
	
	sort(v.begin(), v.end() ,compare);

    for(int i = 0; i < v.size(); i++) {
        cout << v[i].second << " " << v[i].first << "\n"; 
    }
	/**==Result==
		a 1000
		c 700
		b 300
		g 300
		e 250
	*/
	return 0;
}

sort() 함수의 기본 사용법5

변수가 3개일 때 ‘두 개’의 변수를 기준으로 정렬하는 방법

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

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

int main(void){
	vector<pair<string, pair<int, int> > > v;
	v.push_back(pair<string, pair<int, int> >("김길동", pair<int, int>(90, 20150121)));
	v.push_back(pair<string, pair<int, int> >("유길동", pair<int, int>(97, 20130521)));
	v.push_back(pair<string, pair<int, int> >("박길동", pair<int, int>(40, 20050217)));
	v.push_back(pair<string, pair<int, int> >("이길동", pair<int, int>(60, 19900311)));
	v.push_back(pair<string, pair<int, int> >("학길동", pair<int, int>(20, 20111221)));
	
	
	sort(v.begin(), v.end(), compare);
	
	for(int i = 0; i < v.size(); i++){
		cout << v[i].first << ' ';
	} 
	return 0;
}

References