C++ vector 정렬(sort) - 오름차순, 내림차순
Notepad96
·2020. 11. 10. 19:20
300x250
1. 정렬(Sort)
C++ 에서는 STL algorithm 라이브러리에서 sort 함수를 지원해준다.
정렬 방식은 퀵 정렬로서 빠른 속도를 보장한다.
sort 함수는 일련의 반복자를 사용함으로 Set이나 Map 같은 컨테이너에서는 sort함수를 사용할 수는 없다.
2. 코 드
환경 : Visual studio 2019
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void print(vector<int> v) {
for (int i = 0; i < v.size(); i++) {
cout << v[i] << ' ';
}
cout << "\n";
}
// vector<pair<int, int>> 이기 때문에 인자 타입은 pair<int, int> 이 된다.
// vector<int>의 vector였다면 인자 타입은 int 가 된다.
bool desc(pair<int, int> a, pair<int, int> b) {
// 각 원소들을 first에 관해서는 오름차순 정렬을, second에 관해서는 내림차순으로 정렬한다.
if (a.first == b.first) return a.second > b.second;
else return a.first < b.first;
}
int main() {
vector<int> v;
for (int i = 1; i < 11; i++) v.push_back(i);
print(v);
// 오름차순 정렬
sort(v.begin(), v.end());
// 내림차순 정렬
// 1. reverse 반복자인 rbegin, rend 이용
sort(v.rbegin(), v.rend());
// 2. greater를 사용하여서 내림차순. less는 오름차순
sort(v.begin(), v.end(), greater<int>());
// 3 람다 방식으로 작성(아래 함수로 임의 순으로 정렬 방식과 동일)
sort(v.begin(), v.end(), [](int a, int b) {
return a > b;
});
print(v);
vector<pair<int, int>> v2;
v2.push_back(make_pair(5, 3));
v2.push_back(make_pair(5, 1));
v2.push_back(make_pair(4, 2));
v2.push_back(make_pair(4, 8));
// 함수로 임의 순으로 정렬. 이는 오름/내림차순뿐 아니라 임의로 순서를 지정해낼 수 있다.
sort(v2.begin(), v2.end(), desc);
for (int i = 0; i < v2.size(); i++) {
cout << v2[i].first << ":" << v2[i].second << " ";
}
cout << "\n";
return 0;
}
- sort함수를 사용하기 위해서는 algorithm 라이브러를 추가해주어야 한다.
- 오름 차순으로 정렬하기 위해서는 sort 함수의 인수로 vector의 begin, end 반복자를 주면 된다.
- 정렬을 오름차순 혹은 내림차순이 아니라 특정한 기준에 따라 정렬을 하고 싶을 경우(예를 들어 문자열 vector을 문자열의 2번째 글자에 따라서 정렬) 정렬의 기준을 갖는 함수를 구현하여 정렬할 수 있다.
함수의 반환형은 bool이며
인자는 해당 vector의 제네릭 타입이다. (vector<pair<int,int>> 일 경우 pair<int, int> )
또한, 람다 방식을 사용하여서 함수를 선언하지 않고 바로 지정할 수 있다.
3. 참 조
300x250
'C++ > STL' 카테고리의 다른 글
C++ 원소 개수 구하기 Count (0) | 2020.11.13 |
---|---|
C++ Vector 값 탐색 find - 존재 유무 확인 (0) | 2020.11.12 |
C++ Vector 최대값, 최소값, 인덱스 구하기 (0) | 2020.11.12 |
C++ 조합(Combination) - next_permutation (1) | 2020.11.12 |
C++ 순열(Permutation) - next_permutation (0) | 2020.11.11 |