유용한 정보

C++ sort함수 cmp 함수

cosmohoo 2021. 10. 8. 23:56
반응형

C++ STL 중 algorithm 헤더를 사용할 경우 sort() 함수를 사용할 수 있습니다. 

해당 함수의 사용법과 독자적으로 만든 cmp 함수를 사용하여 다른 sorting을 하는 방법을 알아보겠습니다. 

 

 

SORT

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


using namespace std;



int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
   
    int arr[5] = {1, 10, 100, 2, 4};
    vector<int> arr2 = {1, 10, 100, 2, 4};
    
    sort(arr, arr+5 );
    sort(arr2.begin(), arr2.end());
    
    cout << "배열 arr : ";
    for(int tmp : arr) cout<<tmp<<" ";
    
    cout << "\n배열 arr2 : ";
    for(int tmp : arr2) cout<<tmp<<" ";
    
    
    return 0;
}

 

실행화면

 

int형 배열 arr와 int형 vector arr2의 sorting 결과입니다. 

sort함수는 오름차순으로 작은 수부터 큰 수의 순서로 점차 커지는 것을 확인 할 수 있습니다. 

 

sort( 시작주소, 끝나는 주소, default) ;

 

위와 같은 기본 형식을 따르고 있습니다. 

 

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


using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
   
    int arr[5] = {1, 10, 100, 2, 4};
    vector<int> arr2 = {1, 10, 100, 2, 4};
    
    sort(arr, arr+5 , greater<int>());
    sort(arr2.begin(), arr2.end(), less<int>());
    
    cout << "배열 arr : ";
    for(int tmp : arr) cout<<tmp<<" ";
    
    cout << "\n배열 arr2 : ";
    for(int tmp : arr2) cout<<tmp<<" ";
    
    
    return 0;
}

 

 

greater <자료형>()와 less <자료형>()을 사용하여 내림차순과 오름차순을 표현할 수 있습니다. 

3번째 인자의 경우, 원하는 함수를 만들어 원하는 형식으로 sorting 할 수 있습니다. 

 

 

cmp함수 생성법

struct boxer
{
    int weight=0; 
    double rateW=0.00;
    int numW=0;//본인보다 무거운 애들 때린 횟수
    int num=0;
};

bool cmp(const boxer &B1, const boxer &B2)
{
    if(B1.rateW > B2.rateW)
    {
        return true;
    }
    if(B1.rateW == B2.rateW)
     {
        if(B1.numW > B2.numW)
        {
            return true;
        }    
        
        if(B1.numW == B2.numW)
        {
            if(B1.weight > B2.weight)
            {  
                 return true;
            }
             
            if(B1.weight == B2.weight)
            {  
                    if(B1.num < B2.num)
                {
                     return true;
                }
            }    
         }
     }
    return false;
}

 

이와 같이 필요한 구조체를 생성한 후 구조체를 비교하는 cmp함수를 생성하여 sorting 함수에 사용할 수 있습니다. 

cmp 함수를 만드는 경우에 참조형 변수로 만드는 경우가 더 안전한 것으로 보입니다. (구조체인 경우) 

실제 사용 예는 아래와 같습니다. 

 

sort(arr.begin(), arr.end(), cmp);

 

 

 

반응형