template<class FwdIt, class T>
pair<FwdIt, FwdIt> equal_range(FwdIt first, FwdIt last,
const T& val);
template<class FwdIt, class T, class Pred>
pair<FwdIt, FwdIt> equal_range(FwdIt first, FwdIt last,
const T& val, Pred pr);
The first template function effectively returns pair
(
lower_bound
(first, last, val),
upper_bound
(first,
last, val))
, where the elements designated by iterators in the range [first, last)
form a sequence ordered by
operator<
. Thus, the function determines the largest range of positions over which val
can be inserted in the
sequence and still preserve its ordering.
If FwdIt
is a random-access iterator type, the function evaluates the ordering predicate X < Y
at most ceil(2 *
log(last - first)) + 1
times. Otherwise, the function evaluates the predicate a number of times proportional to last
- first
.
The second template function behaves the same, except that it replaces operator<(X, Y)
with pr(X, Y)
.