본문 바로가기
프로그래밍 언어/C++

[C++] sort() 함수란?

by 까망 하르방 2022. 1. 1.
반응형

개발할 때나 코딩 테스트에서 많이 활용되는 정렬(Sort)

단순히 정렬된 원소를 요구하는 경우도 많지만

상황에 따라서는 정렬 기법을 응용해서 문제 접근해야 하는 경우도 많다.

[C++] 에서도 이러한 정렬을 라이브러리로 제공해준다.

📌 [ps] 문자열 사전 오름차순 비교 및 정렬

📌 [ps] 여러 정수 기준에 따른 우선순위 비교 및 정렬


• 헤더파일 #include <algorithm>

• 함수원형 void sort(startT endCompare comp);

 Default는 오름차순이지만 3번째 인자로 정렬 기준을 줄 수 있다.

    • sort(arr, arr+n);

    • sort(v.begin(), v.end());

    • sort(v.begin(), v.end(), comp); // 사용자 정의 함수

    • sort(v.begin(), v.end(), greater<T>()); // 내림 차순

    • sort(v.begin(), v.end(), less<T>()); // 오름 차순

 

배열을 이용한 예제 코드

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
       int a[] = { 3, 5, 4, 1, 2 };

       sort(a, a + 5);

       for (int i = 0; i < 5; ++i)
       {
              cout << a[i] << ' ';
       }
}

 

vector + 사용자 정의함수

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int compare(int A, int B)
{
    return A > B;
}

int main()
{
    vector<int> v = { 3, 5, 4, 1, 2 };
    
    sort(v.begin(), v.end(), compare);
    for (int i = 0; i < v.size(); ++i)
    {
        cout << v[i] << endl;
    }
}

 

greater<int>()

#include <functional> 의

greater<T>() 와 less<T>() 도 활용 가능하다.

ex) greater<int>() 으로 내림차순 정렬된다.

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

using namespace std;

int main()
{
    vector<int> v = { 3, 5, 4, 1, 2 };
    
    sort(v.begin(), v.end(), greater<int>());
    for (int i = 0; i < v.size(); ++i)
    {
        cout << v[i] << endl;
    }
}

 

객체 + 여러 비교 조건

실무에서는 데이터를 객체로 관리하는 경우가 많다.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Node
{
       string name;
       int grade;

       bool operator <(Node& tg)
       {      
              if (this->grade == tg.grade)
                     return this->name < tg.name;
              return this->grade < tg.grade;
       }
};

int main()
{
       vector<Node> v =
       {
              {"zz", 3},
              {"abz", 1},
              {"abcd", 1},
              {"abc", 1},
              {"zz", 2},
       };

       sort(v.begin(), v.end());

       for (int i = 0; i < v.size(); i++)
       {
              cout << "(" << v[i].name << ", " << v[i].grade << ") " << endl;
       }
}

등급이 낮은 숫자가 먼저 오되,

이름을 알파벳 오름차순으로 정렬하였다.


비교 기준이 명확한 코딩 테스트에서는 그렇지 않겠지만

실무나 개인 프로젝트 사용에서 sort() 사용에 주의할 필요가 있다.

비교 기준이 명확하지 않을 때 원치않은 결과가 나올 수 있기 때문이다.

📌 stable_sort()와 sort() 차이 알아보기 

 

stable_sort()와 sort() 차이 알아보기

배열이나 vector 원소를 정렬하는데 있어서 자주 사용되는 sort() C++에는 stable_sort()라는 것도 있다. 둘의 가장 큰 차이는 원소 순서를 보장 여부로 「안정성」이지 않을까 싶다. • sort() 기존 순서

zoosso.tistory.com

반응형

댓글