ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <iostream>
    #include <algorithm>
     
    using namespace std;
     
    int main(void) {
        int a[10= {518932746};
     
        sort(a, a+10);
     
        for(int i=0; i<10; i++) {
            cout << a[i] << ' ';
        }
     
    }
     
    cs

      ▶ 결과화면

      - 먼저 크기가 10인 a의 배열을 선언하고 초기화 해준다음 sort 함수를 사용하였습니다.

        첫번째 요소와 두번째 요소로 정렬 범위를 지정하였고,

         sort는 기본적으로 오름차순 정렬이 되기 때문에 결과화면에서 확인할 수 있습니다.




      2-2. 사용 예제 2.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <iostream>
    #include <algorithm>
     
    using namespace std;
     
    int main(void) {
        int a[10= {5189327460};
     
        sort(a, a+10, greater<int>());
     
        for(int i=0; i<10; i++) {
            cout << a[i] << ' ';
        }
     
    }
    cs

      ▶ 결과화면 

      - sort함수에 3번째 인자로 greater<int>()를 추가해줌으로써 

        기본 정렬이었던 오름차순정렬을 내림차순정렬로 바뀐 결과를 볼 수 있습니다.




      2-3. 사용 예제 3.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #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

      ▶ 결과화면 

      - 클래스 내 연산자 오버로딩을 통해 학생의 점수 기준으로 오름차순으로 정렬해보았습니다.





    반응형
Designed by Tistory.