sort() 함수를 살펴보면 sort()의 세 번째 인자 값으로 compare()함수를 만들어서 넣어줬음을 볼 수 있다. 위와 같이 정렬의 기준을 자신이 원하는 형태로 설정할 수 있다.
소스코드의 실행 결과는 내림차순으로 출력된다.
sort() 함수의 기본 사용법3
위의 1, 2 의 경우에는 단순 데이터 정렬 기법이다. 또한 실무에서 사용하기에 적합하지 않다. 실무에서 프로그래밍을 할 때는 모든 데이터들이 개겣로 정리되어 내부적으로 여러개의 변수를 포함하고 있기 때문이다. 이 경우 가장 중요한 정렬 방식은 ‘특정한 변수를 기준으로’ 정렬하는 것이다.
#include<algorithm>#include<iostream>usingnamespacestd;classStudent{public:stringname;intscore;Student(stringname,intscore){this->name=name;this->score=score;}// 정렬 기준 점수가 낮은 순서 booloperator<(Student&student){returnthis->score<student.score;}};intmain(void){Studentstudents[]={Student("김길동",90),Student("이길동",10),Student("박길동",30),Student("나길동",80)};sort(students,students+4);for(inti=0;i<4;i++){cout<<students[i].name<<'';}return0;}
위 소스코드는 벡터(Vector) 라이브러리와 페어(Pair) 라이브러리를 이용해 클래스를 정의했던 방식을 변경한것이다. 이렇게 소스코드의 길이를 짧게 해주는 기법을 숏코딩(Short Coding)이라고 한다. 작성한 소스코드의 시간 복잡도가 동일하다면, 프로그래밍 대회에서는 소스코드가 짧을 수록 남들보다 앞설수 있다.
백터(Vector) STL은 배열과 같이 작동한다. 원소를 삽입(Push), 삭제(Pop)을 할 수 있다. 기존의 배열을 보다 사용하기 쉽게 개편한 자료구조다.
페어(Pair) STL은 한 쌍의 데이터를 처리할 수 있도록 해주는 자료구조다.
v[].second에서 second는 배열의 2번째 값을 가리킨다는 의미이다.
위 소스코드는 점수를 기준으로 학생을 정렬해서 이름을 출력하는 코드이다.
sort() 함수의 기본 사용법4-1
내림차순(점수 기준)으로 정렬하고 만약 동일 점수가 있다면 이름 사전 순서로 정렬한다.
#include <bits/stdc++.h>
usingnamespacestd;boolcompare(pair<int,string>a,pair<int,string>b){if(a.first==b.first){returna.second<b.second;}else{returna.first>b.first;}}intmain(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(inti=0;i<v.size();i++){cout<<v[i].second<<" "<<v[i].first<<"\n";}/**==Result==
a 1000
c 700
b 300
g 300
e 250
*/return0;}