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를 활용하여 처리하는 방식은 매우 중요하니 잘 학습해 둘 것!