C++ 표준 템플릿 라이브러리(STL: Standard Template Library) sort 함수 다루기
동빈나 실전 알고리즘 강좌
https://www.youtube.com/watch?v=YJ-OUnZu7nQ&list=PLRx0vPvlEmdDHxCvAQS1_6XV4deOwfVrz&index=9
https://blog.naver.com/ndb796/221227975229
기본적인 사용법
오름차순(default) 정렬하기
#include <iostream>
#include <algorithm>
using namespace std;
int main(void){
int a[10] = {9, 3, 5, 4, 1, 10, 8, 6, 7, 2};
sort(a, a+10);
for(int i=0; i<10; i++){
cout << a[i] << " ";
}
}
// 1 2 3 4 5 6 7 8 9 10
함수를 이용하여 내림차순으로 정렬하기
#include <iostream>
#include <algorithm>
using namespace std;
bool compare(int a, int b){
// default: a < b
return a > b;
}
int main(void){
int a[10] = {9, 3, 5, 4, 1, 10, 8, 6, 7, 2};
sort(a, a+10, compare);
for(int i=0; i<10; i++){
cout << a[i] << " ";
}
}
// 10 9 8 7 6 5 4 3 2 1
객체에서 사용한다면 연산자 오버로딩을 잘 정의해줘야 한다.
#include <iostream>
#include <algorithm>
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("A", 90),
Student("B", 95),
Student("C", 92),
Student("D", 100),
Student("E", 88)
};
sort(students, students+5);
for(int i=0; i<5; i++){
cout << students[i].name << " ";
}
}
// E A C B D
begin(), end()
는 default로 첫 번째 원소 기준으로 정렬을 시킨다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(void){
vector<pair<int, string> > v;
v.push_back(pair<int, string>(90, "A"));
v.push_back(pair<int, string>(95, "B"));
v.push_back(pair<int, string>(92, "C"));
v.push_back(pair<int, string>(100, "D"));
v.push_back(pair<int, string>(88, "E"));
sort(v.begin(), v.end());
for(int i=0; i < v.size() ; i++){
cout << v[i].second << " ";
}
return 0;
}
// E A C B D
compare 함수가 필요하다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool compare(pair<string, int> a, pair<string, int> b){
return a.second < b.second;
}
int main(void){
vector<pair<string, int> > v;
v.push_back(pair<string, int>("A", 90));
v.push_back(pair<string, int>("B", 95));
v.push_back(pair<string, int>("C", 92));
v.push_back(pair<string, int>("D", 100));
v.push_back(pair<string, int>("E", 88));
sort(v.begin(), v.end(), compare);
for(int i=0; i < v.size() ; i++){
cout << v[i].first << " ";
}
return 0;
}
// E A C B D
성적이 같다면 생일이 느린 순으로 정렬하시오.
#include <iostream>
#include <algorithm>
#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> >("A", make_pair(90, 19940915)));
v.push_back(pair<string, pair<int, int> >("B", make_pair(94, 19941102)));
v.push_back(pair<string, pair<int, int> >("C", make_pair(92, 19940108)));
v.push_back(pair<string, pair<int, int> >("D", make_pair(90, 19941017)));
v.push_back(pair<string, pair<int, int> >("E", make_pair(94, 19940616)));
sort(v.begin(), v.end(), compare);
for(int i=0; i < v.size() ; i++){
cout << v[i].first << " ";
}
return 0;
}
// D A C B E