C++ STL sort() 함수다루기01
정렬은 컴퓨터 공학의 오래된 연구 분야이므로 이미 아주 훌륭한 정렬관련 라이브러리가 존재한다. 그렇기 때문에 필요시 이 라이브러리를 가져다 쓰면 된다.
sort() 함수의 기본 사용방법
sort() 함수는 C++ algorithm 헤더에 포함되어 있다. 기본 사용법은 아래와 같다.
#include <iostream> //cout을 사용하게 해줌.
#include <algorithm>
using namespace std;
void show(int sort[]){
for(int i = 0; i < 10; i++){
cout << sort[i] << ' ';
}
}
int main(void){
int a[10] = {9, 3, 5, 4, 1, 10, 8, 6, 7, 2};
//10은 가장 마지막 원소인 2를 말한다.(쉽게 말하면 데이터 개수를 +해주면된다.)
//컴퓨터는 데이터가 9 ~ 2까지 있다는 것을 알 수 있다.
sort(a, a + 10);
show(a);
}
정렬기준 설정
sort() 함수는 정렬기준을 직접 설정할 수 있다.
#include <iostream> //cout을 사용하게 해줌.
#include <algorithm>
using namespace std;
bool compare(int a, int b){
//작은 값이 앞으로 감.
return a < b;
}
void show(int sort[]){
for(int i = 0; i < 10; i++){
cout << sort[i] << ' ';
}
}
int main(void){
int a[10] = {9, 3, 5, 4, 1, 10, 8, 6, 7, 2};
//10은 가장 마지막 원소인 2를 말한다.(쉽게 말하면 데이터 개수를 +해주면된다.)
//컴퓨터는 데이터가 9 ~ 2까지 있다는 것을 알 수 있다.
sort(a, a + 10, compare); //기본적으로 sort() 함수는 오름차순이다.
show(a);
}
객체로 정렬하는 방법
실무에서는 int a[10] = {9, 3, 5, 4, 1, 10, 8, 6, 7, 2};와 같은 데이터를 정렬하지 않는다. 객체 안에 여러 변수를 두어 객체 단위로 정렬을 수행한다. 다음 예제코드를 보자.
#include <iostream> //cout을 사용하게 해줌.
#include <algorithm>
using namespace std;
class Student {
public:
string name;
int score;
Student(string name, int score){
this -> name = name;
this -> score = score;
}
//정렬기준은 '점수가 작은 순서'.
//연산자 오버로딩. 기본에 제공하고 있는 연산자를 재정의하여 사용자 정의 클래스로 사용
//sort() 함수가 내부적으로 객체연산 즉, student01 < student02 연산을 하기 위해서.
//함수명을 operator로 해야 컴파일러가 연산자 오버로드 함수인 것을 인식시킨다.
bool operator < (Student &student){
return this->score < student.score;
}
};
void show(Student students[]){
for(int i = 0; i < 5; i++){
cout << students[i].name << ' ';
}
}
int main(void){
Student students[]= {
Student("윤강민", 90),
Student("이상욱", 93),
Student("박한울", 97),
Student("강종구", 87),
Student("이태일", 92)
};
//이미 Student 클래스에서 operator 함수를 구현했기 때문에 compare는 안넣어도 된다.
sort(students, students + 5);
show(students);
}
'IT공부 > 알고리즘' 카테고리의 다른 글
C++ STL sort() 함수다루기02 (0) | 2020.07.29 |
---|---|
병합정렬(Merge Sort) (0) | 2020.07.29 |
기초 정렬 알고리즘 문제 풀이 (0) | 2020.07.28 |
퀵 정렬의 시간복잡도와 작동원리 (0) | 2020.07.25 |
삽입정렬 (0) | 2020.07.25 |