C++sort를 사용하여 용기 정렬 실현
STL에서sort 사용 방법
C++ STL 표준 라이브러리의 sort() 함수는 본질적으로 템플릿 함수입니다.이 함수는 용기나 일반 그룹에서 지정한 범위 내의 요소를 정렬하는 데 사용되며, 정렬 규칙은 기본적으로 원소 값의 크기로 승순 정렬을 합니다. 이외에 표준 라이브러리에서 제공하는 다른 정렬 규칙 (예를 들어 std::greater 내림 정렬 규칙) 을 선택할 수 있으며, 심지어는 정렬 규칙을 사용자 정의할 수 있습니다.
특히 sort () 함수는 헤더 파일에 있기 때문에 이 함수를 사용하기 전에 프로그램에는 다음과 같은 문장이 포함되어야 한다.
#include <algorithm>
sort () 함수는 다음과 같은 두 가지 사용법이 있습니다.
// [first, last)
void sort (RandomAccessIterator first, RandomAccessIterator last);
// comp , [first, last)
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
그 중에서first와last는 무작위 접근 교체기입니다. 그들의 조합[first,last)은 정렬할 목표 구역을 지정하는 데 사용됩니다. 또한 두 번째 형식에서comp는 C++STL 표준 라이브러리에서 제공하는 정렬 규칙(예를 들어 std::greater)이거나 사용자 정의 정렬 규칙일 수 있습니다.배열 정렬 예제:
#include <algorithm>
#include <algorithm>
using namespace std;
int main(){
int arr[] = {2,6,3,5,4,8,1,0,9,10};
sort(arr, arr+10);
for(int i = 0;i < 10;i++)
cout << arr[i] << " ";
}
// out
/*
0 1 2 3 4 5 6 8 9 10
*/
STL 표준 라이브러리에서 제공하는 정렬 규칙 사용
int main(){
int arr[] = {2,6,3,5,4,8,1,0,9,10};
sort(arr, arr+10, std::greater<int>());
for(int i = 0;i < 10;i++)
cout << arr[i] << " ";
cout << endl;
sort(arr, arr+10, std::less<int>());
for(int i = 0;i < 10;i++)
cout << arr[i] << " ";
}
// out
/*
10 9 8 6 5 4 3 2 1 0
0 1 2 3 4 5 6 8 9 10
*/
사용자 정의 비교기 사용
bool cmp(const int a, const int b){
return a < b;
}
int main(){
int arr[] = {2,6,3,5,4,8,1,0,9,10};
sort(arr, arr+10, cmp);
for(int i = 0;i < 10;i++)
cout << arr[i] << " ";
}
// out
/*
0 1 2 3 4 5 6 8 9 10
*/
lambda 표현식 사용자 정의 비교기 사용하기
int main(){
int arr[] = {2,6,3,5,4,8,1,0,9,10};
sort(arr, arr+10, [](const int a, const int b){
return a < b;
});
for(int i = 0;i < 10;i++)
cout << arr[i] << " ";
}
// out
/*
0 1 2 3 4 5 6 8 9 10
*/
sort를 사용하여vector에 대한 정렬
C++에서 거의 vector를 조작할 때, 거의 조작 그룹으로 간주할 수 있으며, vector를 대수 그룹의 봉인으로 간주할 수 있다.따라서sort를 사용하여vector를 정렬할 때 위의sort를 사용하여 그룹을 정렬하는 방법을 완전히 따를 수 있습니다.
1차원vector 정렬
int main(){
vector<int> vec = {2,6,3,5,4,8,1,0,9,10};
sort(vec.begin(), vec.end());
for(int item: vec)
cout << item << " ";
return 0;
}
// out
/*
0 1 2 3 4 5 6 8 9 10
*/
2차원vector 정렬.수조는 일련의 좌표를 저장하고 먼저 2차원에 따라 오름차순으로 배열한 다음에 1차원 오름차순으로 배열한다
int main(){
vector<vector<int>> vvi = {{9,1}, {2,3}, {8,7}, {6,2}, {5,2}};
sort(vvi.begin(), vvi.end(), [](const vector<int>& v1, const vector<int>& v2){
if(v1[1] < v2[1]) return true;
else if(v1[1] == v2[1]) return v1[0] < v2[0];
else return false;
});
for(vector<int> v: vvi){
for(int item: v){
cout << item << " ";
}
cout << endl;
}
return 0;
}
// out
/*
9 1
5 2
6 2
2 3
8 7
*/
sort를 사용하여 맵 정렬
맵은
과일과 그 개수를 포함하는 맵을 정의하고 과일 이름 사전순으로 정렬(key로 정렬)
#include<map>
using namespace std;
int main(){
map<string, int, less<string>> msi;
msi["apple"] = 5;
msi["watermelon"] = 2;
msi["pear"] = 3;
msi["peach"] = 6;
msi["cherry"] = 10;
for(auto item: msi)
cout << item.first << " " << item.second << endl;
return 0;
}
// out
/*
apple 5
cherry 10
peach 6
pear 3
watermelon 2
*/
과일과 그 개수를 포함하는 맵을 정의하고 과일 개수에 따라 정렬하며, 과일 개수와 동시에 과일 이름 사전순으로 정렬(맵을vector로 바꾸어 정렬)
bool cmp(const pair<string, int>& a, const pair<string, int>& b){
if(a.second < b.second) return true;
else if(a.second == b.second) return a.first < b.first;
else return false;
}
int main(){
map<string, int> msi;
msi["apple"] = 5;
msi["watermelon"] = 2;
msi["pear"] = 3;
msi["peach"] = 5;
msi["cherry"] = 10;
vector<pair<string, int>> vpi(msi.begin(), msi.end());
sort(vpi.begin(), vpi.end(), cmp);
for(auto item: vpi){
cout << item.first << " " << item.second << endl;
}
return 0;
}
// out
/*
watermelon 2
pear 3
apple 5
peach 5
cherry 10
*/
sort를 사용하여list 정렬
sort () 함수 템플릿은 헤더 파일algorithm에 정의되어 있으며, 무작위 접근 교체기를 사용해야 합니다.그러나list용기는 무작위 접근 교체기를 제공하지 않고 양방향 교체기만 제공하기 때문에list의 요소에sort() 알고리즘을 사용할 수 없습니다.그러나list 템플릿이 자신의sort () 함수를 정의했기 때문에 요소 정렬을 할 수 있습니다.sort () 에는 두 가지 버전이 있습니다. sort () 함수가 없으면 모든 요소를 오름차순으로 배열합니다.두 번째 버전의sort()는 함수 대상이나lambda 표현식을 매개 변수로 받아들인다. 이 두 가지 매개 변수는 두 요소를 비교하는 단언을 정의한다.
목록 정렬 예
int main(){
list<string> ls = {"one", "two", "three"};
ls.sort([](const string& a, const string& b){
return a < b;
});
for(string item: ls) cout << item << " ";
return 0;
}
// out
/*
one three two
*/
참고 문헌C++의 SORT 함수 사용 방법
C++sort() 정렬 함수 사용 설명
C++ Lambda 표현식 상세 정보
STL-map의 간단한 사용 방법
C++ STL에서 맵의 키 정렬 및 값 정렬
C++ list(STL list) 정렬 및 요소 결합 방법 상세 정보
이 글은 C++를 사용하여sort를 사용하여 용기 정렬을 실현하는 것에 대해 소개합니다. 더 많은 C++sort가 용기 정렬에 대한 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio에서 파일 폴더 구분 (포함 경로 설정)Visual Studio에서 c, cpp, h, hpp 파일을 폴더로 나누고 싶었습니까? 어쩌면 대부분의 사람들이 있다고 생각합니다. 처음에 파일이 만들어지는 장소는 프로젝트 파일 등과 같은 장소에 있기 때문에 파일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.