Detailed Description

These algorithms are variations of a classic binary search, and all assume that the sequence being searched is already sorted.

The number of comparisons will be logarithmic (and as few as possible). The number of steps through the sequence will be logarithmic for random-access iterators (e.g., pointers), and linear otherwise.

The LWG has passed Defect Report 270, which notes: The proposed resolution reinterprets binary search. Instead of thinking about searching for a value in a sorted range, we view that as an important special case of a more general algorithm: searching for the partition point in a partitioned range. We also add a guarantee that the old wording did not: we ensure that the upper bound is no earlier than the lower bound, that the pair returned by equal_range is a valid range, and that the first part of that pair is the lower bound.

The actual effect of the first sentence is that a comparison functor passed by the user doesn't necessarily need to induce a strict weak ordering relation. Rather, it partitions the range.

Function Documentation

template<typename _ForwardIterator , typename _Tp >

bool std::binary_search

(

_ForwardIterator

__first,

_ForwardIterator

__last,

const _Tp &

__val

)

Determines whether an element exists in a range.

Parameters:

first

An iterator.

last

Another iterator.

val

The search term.

Returns:

True if val (or its equivalent) is in [first,last ].

Note that this does not actually return an iterator to val. For that, use std::find or a container's specialized find member functions.