C++sort를 사용하여 용기 정렬 실현

본고는 주로 다음과 같은 문제를 해결한다
  • STL에서sort의 사용법
  • 벡터에 대한sort 정렬을 사용합니다
  • sort를 사용하여 맵을 정렬합니다
  • 리스트에 대한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를 사용하여 맵 정렬


    맵은 키 값을 저장하는 데이터 구조로 키에 따라 상응하는value를 신속하게 찾을 수 있습니다. 맵 자체의 실현 방식에는 비교기의 설정이 포함되어 있습니다. 맵이 초기화될 때 비교기를 전송하면 대응하는 정렬을 완성할 수 있습니다.
    과일과 그 개수를 포함하는 맵을 정의하고 과일 이름 사전순으로 정렬(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가 용기 정렬에 대한 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기