partial_sort_copy
partial_sort_copy (부분 정렬 복사)
입력 범위를 정렬해, 앞의 일부(정렬된) 결과를 출력 범위에 복사하는 알고리즘이에요. <algorithm> 헤더에 있어요.
출처: cppreference
본문
partial_sort_copy는 [first, last)의 요소 중 가장 작은 min(last-first, d_last-d_first)개를 정렬된 순서로 [d_first, d_last)에 복사해요.
template< class InputIt, class RandomIt >
RandomIt partial_sort_copy( InputIt first, InputIt last,
RandomIt d_first, RandomIt d_last ); // (1)
비교기 버전도 있어요.
template< class InputIt, class RandomIt, class Compare >
RandomIt partial_sort_copy( InputIt first, InputIt last,
RandomIt d_first, RandomIt d_last,
Compare comp ); // (2)
- 반환 값: 출력 범위에서 마지막으로 쓰인 원소 다음 반복자.
partial_sort가 제자리(in-place)라면, 이 함수는 결과를 별도 출력 버퍼에 담아 입력을 보존해요.
std::vector<int> src{9, 2, 7, 1, 5};
std::vector<int> out(3);
std::partial_sort_copy(src.begin(), src.end(), out.begin(), out.end());
// out == {1, 2, 5} (가장 작은 3개, 정렬됨)
입력은 정렬하지 않고 "정렬된 상위 k개"만 새 배열로 뽑고 싶을 때 써요. 원본을 보존해야 하는 상위 k개 추출에 유용해요.