개발할 때나 코딩 테스트에서 많이 활용되는 정렬(Sort)
단순히 정렬된 원소를 요구하는 경우도 많지만
상황에 따라서는 정렬 기법을 응용해서 문제 접근해야 하는 경우도 많다.
[C++] 에서도 이러한 정렬을 라이브러리로 제공해준다.
📌 [ps] 여러 정수 기준에 따른 우선순위 비교 및 정렬
• 헤더파일 #include <algorithm>
• 함수원형 void sort(T start, T end, Compare 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() 사용에 주의할 필요가 있다.
비교 기준이 명확하지 않을 때 원치않은 결과가 나올 수 있기 때문이다.
'프로그래밍 언어 > C++' 카테고리의 다른 글
💻 함수 오버로딩(Overloading) (0) | 2022.08.03 |
---|---|
[C++] [STL] next_permutation (0) | 2022.01.05 |
stable_sort()와 sort() 차이 알아보기 (0) | 2022.01.01 |
[C++] [STL] fill 함수 사용해보기 (0) | 2021.09.11 |
[C++] 로그(log) 함수 (0) | 2021.09.01 |
댓글