sort()함수
#include <algorithm> 헤더 포함
- default 는 오름차순이다.
- 정렬 조건을 주고 싶을때 함수를 만들어 함수이름 자리에 넣어주면 된다. (필수 X )
sort(시작주소, 끝주소+1, 함수이름 )
1) 기본 배열의 sort
배열의 이름은 배열의 시작 주소값이므로 arr과
arr+ (요소의 개수) 를 단순하게 인자값으로 넣어주면 된다.
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int arr[5] = {3,7,1,9,5};
sort(arr, arr + 5);
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
return 0;
}
2) 벡터의 sort
vector는 동적할당되는 자료구조이므로
v.begin()과 v.end()를 사용하면 편리하다.
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
vector <int> v = { 1,5,5,3,6,31,3 };
sort(v.begin(), v.end());
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
return 0;
}
3) sort 내림차순
3-1 함수 자리에 greater<> 임시객체 호출
#include <functional>
greater<>()
#include<iostream>
#include<algorithm>
#include<vector>
#include<functional>
using namespace std;
int main() {
vector <int> v = { 1,5,5,3,6,31,3 };
sort(v.begin(), v.end(),greater<>());
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
return 0;
}
3-2 함수제작
아래는 compare이라는 함수를 만들어서 sort에서 호출하는 방식이다.
return i > j 라고 되어 있는데 오른쪽에 있는 값(j)이 왼쪽에 있는 값(i)보다 작게 정렬하라는 뜻
즉 오른쪽으로 갈수록 작은 값이 나오게 한다는 뜻이다. (내림차순)
#include<iostream>
#include<algorithm>
#include<vector>
#include<functional>
using namespace std;
bool compare(int i, int j) {
return i > j;
}
int main() {
int arr[5] = {3,7,1,9,5};
sort(arr, arr + 5, compare);
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
cout << endl;
vector <int> v = { 1,5,5,3,6,31,3 };
sort(v.begin(), v.end(), compare);
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
return 0;
}
4) stable_sort()
다중 정렬시 많이 사용하는 친구는이다.
- 여러 값들이 묶여 있을 때하나의 요소로 정렬을 했을 떄 다른 요소의 정렬 순서도 정렬 전과 같이 유지 하는 정렬
#include<iostream>
#include<algorithm>
#include<vector>
#include<functional>
using namespace std;
bool compare2(pair<int, string> a, pair<int, string>b) {
return a.first > b.first;
}
int main() {
int num = 4;
pair<int, string> p;
vector<pair<int, string>> v;
for (int i = 0; i < num; i++) {
cin >> p.first >> p.second;
v.push_back(p);
}
stable_sort(v.begin(), v.end(), compare2);
for (int i = 0; i < 4; i++) {
cout << v[i].first << " " << v[i].second << endl;
}
return 0;
}
입력
정렬 결과
https://jie0025.tistory.com/195
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] 쓰레기값 거르기(아주 작은값) numeric_limits (0) | 2023.09.16 |
---|---|
[C] 쓰레기값과 초기화 (0) | 2023.09.16 |
[C] gets 함수는 사용하지 말아야 한다. (0) | 2023.09.10 |
[C] while 반복문을 종료하는 방법: 센티넬, EOF, 플래그 (0) | 2023.09.10 |
[C++] EOF(End Of File) 처리 방법 (0) | 2023.09.10 |