std::qsort
cppreference.net에서
| 헤더에 정의됨 <cstdlib>
|
||
void qsort( void *ptr, std::size_t count,
std::size_t size, /* c-compare-pred */* comp );
void qsort( void *ptr, std::size_t count,
std::size_t size, /* compare-pred */* comp );
|
(1) | |
extern "C" using /* c-compare-pred */ = int(const void*, const void*);
extern "C++" using /* compare-pred */ = int(const void*, const void*);
|
(2) | (설명 전용*) |
ptr이 가리키는 주어진 배열을 오름차순으로 정렬합니다. 배열은 count개의 요소를 포함하며 각 요소의 크기는 size바이트입니다. comp이 가리키는 함수가 객체 비교에 사용됩니다.
comp이 두 요소를 동등하다고 표시하면 그 순서는 지정되지 않습니다.
배열 요소의 타입이 PODType(C++11까지)TriviallyCopyable 타입(C++11부터)이 아니라면, 동작은 정의되지 않습니다.
매개변수
| ptr | - | 정렬할 배열을 가리키는 포인터 |
| count | - | 배열의 요소 개수 |
| size | - | 배열의 각 요소의 크기(바이트) |
| comp | - | 비교 함수로, 첫 번째 인수가 작으면 두 번째 인수보다 음의 정수 값을 반환하고, 첫 번째 인수가 크면 두 번째 인수보다 양의 정수 값을 반환하며, 인수가 동등하면 0을 반환합니다. 비교 함수의 시그니처는 다음과 동등해야 합니다:
함수는 전달된 객체를 수정하지 않아야 하며, 배열에서의 위치와 관계없이 동일한 객체에 대해 일관된 결과를 반환해야 합니다. |
반환값
(없음)
참고
이름과 달리, C++, C 및 POSIX 표준은 이 함수가 퀵 정렬을 사용하여 구현되거나 복잡도나 안정성에 대한 어떠한 보장도 요구하지 않습니다.
C++ 표준 라이브러리에서 제공하는 두 오버로드는 매개변수 comp의 타입이 다르기 때문에 구별됩니다 (언어 연결이 타입의 일부입니다).
예제
다음 코드는 qsort()를 사용하여 정수 배열을 정렬합니다:
이 코드 실행
#include <array>
#include <climits>
#include <compare>
#include <cstdlib>
#include <iostream>
int main()
{
std::array a{-2, 99, 0, -743, INT_MAX, 2, INT_MIN, 4};
std::qsort
(
a.data(),
a.size(),
sizeof(decltype(a)::value_type),
[](const void* x, const void* y)
{
const int arg1 = *static_cast<const int*>(x);
const int arg2 = *static_cast<const int*>(y);
const auto cmp = arg1 <=> arg2;
if (cmp < 0)
return -1;
if (cmp > 0)
return 1;
return 0;
}
);
for (int ai : a)
std::cout << ai << ' ';
std::cout << '\n';
}
출력:
-2147483648 -743 -2 0 2 4 99 2147483647
결함 보고서
다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 발표된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 405 | C++98 | 배열의 요소는 모든 타입이 가능했다 | 으로 제한됨 PODType |
으로 제한됨
| bsearch 지정되지 않은 타입의 요소를 배열에서 검색 | |
| sort 요소의 범위를 정렬&(함수 템플릿 | |
ranges::sort |
|
is_trivial(C++11) |
(C++26부터 폐기됨) 타입이 trivial한지 확인 |
(클래스 템플릿)C 문서qsort
| |