-
STL sort 사용하기,Algorithm 2019. 1. 23. 15:38반응형
알고리즘을 하나하나 공부해가는데 sort가 정말 유용하다는 것을 새삼 느낀다.
다양한 정렬하는 방식으로 사용자가 정의할 수 있고, 숫자 뿐만 아니라 대소 비교가 가능한 모든 데이터(char, string,, )를 정렬할 수 있다.
0. Algorithm
- 먼저 표준 템플릿 라이브러리(STL : Standard Template Library)는 C++을 위한 라이브러리다.
Algorithm 은 이 STL이 제공하는 요소 중 하나이고, Algorithm 안에서 함수 템플릿 sort 을 이용할 수 있다.
1. sort
- 위와 같이 sort는 default로 2개의 인자를 필요로 합니다.
이때의 2개의 인자는 정렬하는 범위를 나타냅니다. 그리고 기본적으로 오름차순 정렬이 수행됩니다.
- 또한 custom 으로 3개의 인자를 필요로 할때는 해당 함수의 반환값에 맞게 정렬을 할 수 있습니다.
① sort(first, last, Compare comp) ▶ 사용자 정의
② sort(first, last, greater<자료형>()); ▶ 내림차순 정리
③ sort(first, last, less<자료형>()); ▶ 오름차순 정리
2. sort 사용
2-1. 사용 예제 1.
12345678910111213141516#include <iostream>#include <algorithm>using namespace std;int main(void) {int a[10] = {5, 1, 8, 9, 3, 2, 7, 4, 6};sort(a, a+10);for(int i=0; i<10; i++) {cout << a[i] << ' ';}}cs ▶ 결과화면- 먼저 크기가 10인 a의 배열을 선언하고 초기화 해준다음 sort 함수를 사용하였습니다.
첫번째 요소와 두번째 요소로 정렬 범위를 지정하였고,
sort는 기본적으로 오름차순 정렬이 되기 때문에 결과화면에서 확인할 수 있습니다.
2-2. 사용 예제 2.
123456789101112131415#include <iostream>#include <algorithm>using namespace std;int main(void) {int a[10] = {5, 1, 8, 9, 3, 2, 7, 4, 6, 0};sort(a, a+10, greater<int>());for(int i=0; i<10; i++) {cout << a[i] << ' ';}}cs ▶ 결과화면
- sort함수에 3번째 인자로 greater<int>()를 추가해줌으로써
기본 정렬이었던 오름차순정렬을 내림차순정렬로 바뀐 결과를 볼 수 있습니다.
2-3. 사용 예제 3.
123456789101112131415161718192021222324252627282930313233#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 &a) {return this->score < a.score;}};int main(void) {Student students[] = {Student("아잉후", 100),Student("오잉후", 15),Student("이잉후", 70),Student("어잉후", 80)};sort(students, students+4);for(int i=0; i<4; i++) {cout << students[i].name << ':';cout << students[i].score << ' ';}}cs ▶ 결과화면
- 클래스 내 연산자 오버로딩을 통해 학생의 점수 기준으로 오름차순으로 정렬해보았습니다.
반응형'Algorithm' 카테고리의 다른 글
에라토스테네스의 체에 대해 알아보자 (2) 2019.02.09 크루스칼 알고리즘(Kruskal Algorithm)에 대해 알아보자!! (0) 2019.02.07 유니온파인드(Union-Find)에 대해 알아보자 (0) 2019.01.31 퀵 정렬(Quick Sort)에 대해 알아보자 (0) 2019.01.24 Git Hub로 알고리즘 코드 관리하기! (0) 2019.01.21