C++ vector 오름차순, 내림차순으로 정렬하기

 

 

 

 

 

sort() 함수

 

- 사용하기 위해서는  #include <algorithm>  을 해주어야 한다.

 

- 디폴트(기본)적으로 오름차순으로 정렬을 해준다.

 

- 내림차순으로 정렬을 하고자 하거나 특정 조건에 따라서 정렬을 하고자 할 때는 비교함수를 만들어서 인수로 주어야 한다.

( 비교함수명은 본인이 지정하면 된다. )

 

- 비교함수는 리턴형은 bool 형으로 매개변수들의 타입은 정렬하는 vector의 저장하는 값의 타입을 준다.

 

- sort() 함수는 퀵 솔트(Quick sort)으로 구현되어 있어 빠른 속도로 정렬을 한다. 

 

- sort() 함수를 사용한다면 일반적인 배열또한 정렬할 수 있다.

 

 

 

 

[ 코 드 ]

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

bool comp(int a, int b) {
    return a > b;
}

int main() {
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(7);
    v.push_back(8);
    v.push_back(1);
    v.push_back(5);
    
    for (int i = 0; i < v.size(); i++) cout << v[i] << " ";
    cout << " 정렬 전\n\n";

    sort(v.begin(), v.end());   // 오름차순 정렬

    for (int i = 0; i < v.size(); i++) cout << v[i] << " ";
    cout << " 오름차순 정렬 후\n\n";

reverse(v.begin(), v.end());	// 1. 내림차순 정렬 (오름차순정렬 후 같이 사용)
    sort(v.rbegin(), v.rend());		// 2. 내림차순 정렬 ( rbegin()과 rend()를 사용)
    sort(v.begin(), v.end(), comp); // 3. 내림차순 정렬 (비교함수를 사용)

    for (int i = 0; i < v.size(); i++) cout << v[i] << " ";
    cout << " 내림차순 정렬 후\n\n";

	return 0;
}

 

 

- 23라인 : 추가적으로 비교함수를 인수를 주지 않았다. 그러므로 디폴트 값인 오름차순으로 정렬이 된다.

 

 

※ 

- 28라인 : reverse 함수는 뜻 그대로 반대로 뒤집는다. 그래서 이를 오름차순으로 정렬한 후 사용한다면 내림차순으로 정렬한 것과 같은 결과를 얻을 수 있다.

( reverse 함수또한 사용하기 위해서는 #incldue <algorithm> 을 해주어야 한다.

 

- 29라인 : 오름차순 정렬할 때는 인수로 v.begin(), v.end()를 주었었다. 하지만 이대신 v.rbegin(), v.rend()를 주면 내림차순으로 정렬이 된다. ( r은 아마 reverse )

 

- 30라인 : 추가적으로 비교함수를 인수로 주었다. 비교 함수에서 준 조건에 따라 내림차순으로 정렬이 된다. 이 방법은 굳이 내림차순 정렬만이 아니라 특정 조건에 따라서 정렬을 하고자 할 때 사용할 수 있다.

 

 

 

 

 

[ 결 과 ]

 

 

결과를 보면 각각 오름차순과 내림차순으로 각각 잘 정렬된 것을 확인할 수 있다.

 

 

 

 

 

 

 

 

 

+ Recent posts