std::sort는 C++의 STL(Standard Template Library)에서 제공하는 정렬 알고리즘입니다. std::sort 함수는 입력받은 시작 위치와 끝 위치 사이의 요소들을 정렬할 수 있습니다. 정렬은 오름차순으로 진행되며, 정렬 알고리즘은 기본적으로 쿼리 정렬(QuickSort)을 사용합니다.
std::sort 함수는 아래와 같이 사용할 수 있습니다.
#include <algorithm>
#include <vector>
int main()
{
std::vector<int> v = {3, 1, 4, 1, 5, 9};
// v의 요소들을 오름차순으로 정렬
std::sort(v.begin(), v.end());
return 0;
}
std::sort 함수는 첫 번째 인자로 시작 위치를, 두 번째 인자로 끝 위치를 전달받습니다. 위 코드에서는 v.begin()이 시작 위치를, v.end()가 끝 위치를 가리키게 됩니다. 이렇게 전달된 시작 위치와 끝 위치 사이의 요소들을 오름차순으로 정렬합니다.
std::sort 함수는 시작 위치와 끝 위치 사이의 요소들이 임의의 컨테이너(container) 내용을 정렬할 수 있습니다. 컨테이너는 요소들을 저장하는 자료구조를 말합니다. std::vector, std::list, std::array 등이 컨테이너입니다. 이러한 컨테이너들은 std::sort 함수를 사용해서 요소들을 정렬할 수 있습니다.
기본적으로 std::sort 함수는 입력된 요소들을 오름차순으로 정렬합니다. 즉, 작은 값부터 큰 값으로 정렬합니다. 하지만 std::sort 함수는 정렬 순서를 지정할 수 있는 옵션을 제공합니다. 정렬 순서를 지정할 수 있는 옵션으로는 아래와 같은 것들이 있습니다.
std::greater<T>: 입력된 요소들을 내림차순으로 정렬합니다.
std::less<T>: 입력된 요소들을 오름차순으로 정렬합니다. 이는 기본 정렬 순서입니다.
사용자 정의 함수: 사용자가 정의한 함수를 정렬 기준으로 사용할 수 있습니다.
예를 들어, 아래 코드처럼 사용할 수 있습니다.
#include <algorithm>
#include <vector>
int main()
{
std::vector<int> v = {3, 1, 4, 1, 5, 9};
// v의 요소들을 내림차순으로 정렬
std::sort(v.begin(), v.end(), std::greater<int>());
return 0;
}
위 코드에서는 `std::greater<int>`를 정렬 기준으로 지정하여 `v`의 요소들을 내림차순으로 정렬합니다.
사용자 정의 함수를 정렬 기준으로 지정할 수도 있습니다. 예를 들어, 아래 코드처럼 사용할 수 있습니다.
#include <algorithm>
#include <vector>
bool myCompare(int a, int b)
{
// a가 b보다 작으면 true, 그렇지 않으면 false를 반환
return a < b;
}
int main()
{
std::vector<int> v = {3, 1, 4, 1, 5, 9};
// v의 요소들을 오름차순으로 정렬
std::sort(v.begin(), v.end(), myCompare);
return 0;
}
위 코드에서는 사용자 정의 함수 myCompare를 정렬 기준으로 지정하여 v의 요소들을 오름차순으로 정렬합니다.
이제 std::sort 함수에 대한 설명이 완료되었습니다. 참고로 std::sort 함수는 내부적으로 퀵 정렬(QuickSort) 알고리즘을 사용하지만, 입력 요소의 개수가 적거나 입력 요소의 순서가 일부분 이미 정렬되어 있을 경우 이진 검색 정렬(Binary Search Sort) 알고리즘을 사용할 수도 있습니다. 이진 검색 정렬은 입력 요소의 개수가 적고, 일부분 정렬되어 있을 경우 더 빠른 정렬 속도를 제공합니다.
'프로그래밍 > C++' 카테고리의 다른 글
C++ transform (0) | 2023.02.18 |
---|---|
C++ Functor(함수 객체) (2) | 2023.02.17 |
C++ enum 열거형 (1) | 2023.01.04 |
C++ std::begin, std::end, iterator (0) | 2022.02.19 |
C++ std::numeric_limits (0) | 2022.02.19 |