template<class ForwardRange, class UnaryPredicate> typename range_iterator<ForwardRange>::type stable_partition(ForwardRange& rng, UnaryPredicate pred); template<class ForwardRange, class UnaryPredicate> typename range_iterator<const ForwardRange>::type stable_partition(const ForwardRange& rng, UnaryPredicate pred); template< range_return_value re, class ForwardRange, class UnaryPredicate > typename range_return<ForwardRange, re>::type stable_partition(ForwardRange& rng, UnaryPredicate pred); template< range_return_value re, class ForwardRange, class UnaryPredicate > typename range_return<const ForwardRange, re>::type stable_partition(const ForwardRange& rng, UnaryPredicate pred);
stable_partition
reorders
the elements in the range rng
base on the function object pred
.
Once this function has completed all of the elements that satisfy pred
appear before all of the elements
that fail to satisfy it. stable_partition
differs from partition
because it preserves relative order. It is stable.
For the versions that return an iterator, the return value is the iterator
to the first element that fails to satisfy pred
.
For versions that return a range_return
,
the found
iterator is
the iterator to the first element that fails to satisfy pred
.
Defined in the header file boost/range/algorithm/stable_partition.hpp
ForwardRange
is a
model of the Forward
Range Concept.
ForwardRange
is mutable.
UnaryPredicate
is
a model of the PredicateConcept
.
Best case: O(N)
where N
is distance(rng)
.
Worst case: N *
log(N)
swaps, where N
is distance(rng)
.