![]() |
Home | Libraries | People | FAQ | More |
template<class BidirectionalRange> BidirectionalRange& inplace_merge( BidirectionalRange& rng, typename range_iterator<BidirectionalRange>::type middle ); template<class BidirectionalRange> const BidirectionalRange& inplace_merge( const BidirectionalRange& rng, typename range_iterator<const BidirectionalRange>::type middle ); template<class BidirectionalRange, class BinaryPredicate> BidirectionalRange& inplace_merge( BidirectionalRange& rng, typename range_iterator<BidirectionalRange>::type middle, BinaryPredicate pred ); template<class BidirectionalRange, class BinaryPredicate> const BidirectionalRange& inplace_merge( const BidirectionalRange& rng, typename range_iterator<const BidirectionalRange>::type middle, BinaryPredicate pred );
inplace_merge combines
two consecutive sorted ranges [begin(rng), middle)
and [middle, end(rng)) into a single sorted range [begin(rng), end(rng)). That is, it starts with a range [begin(rng), end(rng)) that consists of two pieces each of
which is in ascending order, and rearranges it so that the entire range
is in ascending order. inplace_merge
is stable, meaning both that the relative order of elements within each
input range is preserved.
Defined in the header file boost/range/algorithm/inplace_merge.hpp
For the non-predicate version:
BidirectionalRange
is a model of the Bidirectional
Range Concept.
BidirectionalRange
is mutable.
range_value<BidirectionalRange>::type is a model of LessThanComparableConcept
range_type<BidirectionalRange>::type
is a strict weak ordering,
as defined in the LessThanComparableConcept
requirements.
For the predicate version: * BidirectionalRange is a model of the
Bidirectional Range
Concept. * BidirectionalRange
is mutable. * BinaryPredicate
is a model of the StrictWeakOrderingConcept.
* BidirectionalRange's
value type is convertible to both BinaryPredicate's
argument types.
middle is in the range
rng.
[begin(rng), middle) is in ascending order. That is for
each pair of adjacent elements [x,y],
y <
x is false.
[middle, end(rng)) is in ascending order. That is for
each pair of adjacent elements [x,y],
y <
x is false.
middle is in the range
rng.
[begin(rng), middle) is in ascending order. That is for
each pair of adjacent elements [x,y],
pred(y,x) == false.
[middle, end(rng)) is in ascending order. That is for
each pair of adjacent elements [x,y],
pred(y,x) == false.
Worst case: O(N log(N))