컴퓨터 언어/C++

[c++] Sort 함수를 활용하여 정렬하기

  • -
728x90
반응형

python의 경우에는 바로 sort함수를 쓸 수 있는 것과 달리 (Built in function이므로) c++의 경우에는 sort함수가 algorithm 헤더 안에 속해 있으므로 이를 사용하기 위해서는 초반부에 반드시 algorithm을 선언해주어야 한다.

 

위 함수에서의 인자는 다음과 같다.

sort(시작지점의 주소, 끝나는 지점의 주소, (정렬의 기준))

 

예를 들어 5칸짜리 int형 배열 test을 첫번째에서 3번째 인자만 정렬하고 싶다면

sort(test, test + 3)를 해주면 된다.

단, 끝나는 지점은 열린구간이므로 그 주소는 포함하지 않는다.

 

마지막 인자인 정렬의 기준의 경우에는 반드시 포함될 필요는 없으나, 일반적인 기준인 오름차순으로 정렬하지 않는다면 삽입해주어야 한다.

이를 위해서는 따로 2개의 파라미터를 받는 boolean function을 선언해주어야 한다.

단, 위 함수에서의 return 값에서 각 파라미터의 순서가 유지될 때 true 값이 반환되게끔만 잡아주면 된다.

 

대략적인 꼴은 다음과 같다.

bool cmp(const Type1 &a, const Type2 &b);

 

위의 내용을 이용한 문제는 다음과 같다.

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

using namespace std;

bool compare(string , string);

int main(void){
    int n;
    cin >> n;

    string data_store[n];
    for (int i = 0; i < n; i++){
        cin >> data_store[i];
    } // data_store

    sort(data_store, data_store + n, compare);

    cout << data_store[0] << "\n";
    int check = 0; // initial setting

    for (int j = 1; j < n; j++){
        if (data_store[j] == data_store[check]){
            continue;
        }
        else{
            cout << data_store[j] << "\n";
            check = j;
        }   
    }
    return 0;
}

bool compare(string a, string b){
    if (a.size() == b.size()){
        return a < b;
    }
    else{
        return a.size() < b.size(); // 인자 두 개를 받는 비교 함수로, 첫 번째 인자가 더 작을 경우 true 를 리턴해야 합니다.        
    }   
}

sort 함수를 정확하게 익혀두도록 하자.

특히 sort함수에서 compare를 활용하여 처리하는 방식은 매우 중요하니 잘 학습해 둘 것!

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.