template<class InIt, class RanIt>
RanIt partial_sort_copy(InIt first1, InIt last1,
RanIt first2, RanIt last2);
template<class InIt, class RanIt, class Pred>
RanIt partial_sort_copy(InIt first1, InIt last1,
RanIt first2, RanIt last2, Pred pr);
The first template function determines K
, the number of elements to copy as the smaller of last1 - first1
and
last2 - first2
. It then copies and reorders K
of the sequence designated by iterators in the range [first1,
last1)
such that the K
elements copied to first2
are ordered by operator<
. Moreover, for each N
in the range
[0, K)
and for each M
in the range (0, last1 - first1)
corresponding to an uncopied element, the predicate
!(*(first2 + M) < *(first1 + N))
is true. Thus, the smallest K
elements of the entire sequence designated by
iterators in the range [first1, last1)
are copied and sorted in ascending order to the range [first2, first2 +
K)
.
The function evaluates the ordering predicate X < Y
ceil((last - first) * log(K))
times, at most.
The second template function behaves the same, except that it replaces operator<(X, Y)
with pr(X, Y)
.
Sample programs: one and one (predicate version).