The binary search algorithms use the fact that the ranges are already sorted. To search for an element, use
std::lower_bound you get an iterator for the first element, being no smaller than the given value. With
std::upper_bound you get an iterator back for the first element, which is bigger than the given value.
std:::equal_range combines both algorithms.
If the container has n elements, you need on average log2(n) comparisons for the search. The binary search requires that you use the same comparison criterion that you used for sorting the container. Per default the comparison criterion is
std::less, but you can adjust it. Your sorting criterion has to obey the strict weak ordering. If not, the program is undefined.
If you have an unordered associative container, the methods of the unordered associative container are in general faster.
Searches the element
val in the range: