Home | Libraries | People | FAQ | More |
template< class SinglePassRange1, class SinglePassRange2, class OutputIterator > OutputIterator merge(const SinglePassRange1& rng1, const SinglePassRange2& rng2, OutputIterator out); template< class SinglePassRange1, class SinglePassRange2, class OutputIterator, class BinaryPredicate > OutputIterator merge(const SinglePassRange1& rng1, const SinglePassRange2& rng2, OutputIterator out, BinaryPredicate pred);
merge
combines two sorted
ranges rng1
and rng2
into a single sorted range by
copying elements. merge
is stable. The return value is out
+ distance(rng1) + distance(rng2)
.
The two versions of merge
differ by how they compare the elements.
The non-predicate version uses the operator<()
for the range value type. The predicate
version uses the predicate instead of operator<()
.
Defined in the header file boost/range/algorithm/merge.hpp
For the non-predicate version:
SinglePassRange1
is
a model of the Single
Pass Range Concept.
SinglePassRange2
is
a model of the Single
Pass Range Concept.
range_value<SinglePassRange1>::type
is the same as range_value<SinglePassRange2>::type
.
range_value<SinglePassRange1>::type
is a model of the LessThanComparableConcept
.
range_value<SinglePassRange1>::type
is a strict weak ordering,
as defined in the LessThanComparableConcept
requirements.
range_value<SinglePassRange1>::type
is convertible to a type in
OutputIterator
's set
of value types.
For the predicate version:
SinglePassRange1
is
a model of the Single
Pass Range Concept.
SinglePassRange2
is
a model of the Single
Pass Range Concept.
range_value<SinglePassRange1>::type
is the same as range_value<SinglePassRange2>::type
.
BinaryPredicate
is
a model of the StrictWeakOrderingConcept
.
SinglePassRange1
's
value type is convertible to both BinaryPredicate
's
argument types.
range_value<SinglePassRange1>::type
is convertible to a type in
OutputIterator
's set
of value types.
rng1
are in ascending order. That is, for each adjacent element pair [x,y]
of rng1
,
y <
x ==
false
.
rng2
are in ascending order. That is, for each adjacent element pair [x,y]
of rng2
,
y <
x ==
false
.
rng1
and
[out, out + distance(rng1) + distance(rng2))
do not overlap.
rng2
and
[out, out + distance(rng1) + distance(rng2))
do not overlap.
[out, out + distance(rng1) + distance(rng2))
is a valid range.
rng1
are in ascending order. That is, for each adjacent element pair [x,y]
, of rng1
,
pred(y, x) == false
.
rng2
are in ascending order. That is, for each adjacent element pair [x,y]
, of rng2
,
pred(y, x) == false
.
rng1
and
[out, out + distance(rng1) + distance(rng2))
do not overlap.
rng2
and
[out, out + distance(rng1) + distance(rng2))
do not overlap.
[out, out + distance(rng1) + distance(rng2))
is a valid range.
Linear. There are no comparisons if both rng1
and rng2
are empty, otherwise
at most distance(rng1) + distance(rng2) - 1
comparisons.