🖥️ CS/Data Structure & Algorithm
#include<algorithm> 그리고 sort() - (1)
한국의 메타몽
2020. 3. 5. 02:11
https://www.youtube.com/watch?v=YJ-OUnZu7nQ
정렬을 할 때 사용될 수 있는 기법은 다양하다.
선태정렬, 삽입정렬, 버블정렬, 병합정렬, 힙정렬. 당장 떠올릴 수 있는 기법만 해도 5가지이다.
하지만 매번 정렬을 정의해주는 것은 번거로울뿐더러, 구현 과정에서 실수의 여지도 있다.
C++에서는 STL를 통해 오름차순 or 내림차순을 정렬할 수 있는 함수가 이미 구현되어있으므로, 해당 함수를 사용하면 굉장히 편리하다.
#include <algorithm>과 sort(정렬의 시작, 정렬의 끝)만 추가하면 기본적인 정렬이 완성된다.
기억해야할 점은 두 가지이다.
- sort(arr, arr+T)에서 T의 의미는 배열의 주소라기 보다는 배열이 가진 원소의 갯수라고 해석하면 편하다.
- 연산자를 따로 오버로딩하지 않으면 오름차순으로 정렬된다.
왜 Defalut 정렬이 오름차순일까?
찾아보니 하단과 같은 답을 발견하였다.
만약 내림차순으로 정렬하고 싶으면 어떻게할까?
그럴땐 연산자를 오버로딩 하면 된다.
하지만 이러한 기본 로직은 프로그래밍 대회에서나 활용할 수 있고,
실전에서는 객체를 이용해서 사용한다.
객체를 사용해서 구현한 예시는 하단과 같다.
#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 <(const Student &student) const{
return this->score < student.score;
}
};
int main(void){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
Student students[] = {
Student("AA", 99),
Student("BB", 100),
Student("CC", 95),
Student("DD", 97),
};
sort(students,students+4);
for(int i=0; i<4; i++)
cout << students[i].name << " : " << students[i].score << "\n";
return 0;
}
만약 오름차순이 아닌 '내림차순'으로 변경하고 싶으면,
상단의 operator함수에서 '<'를 '>'로 변경해주면 된다.