Syntax:
#include <algorithm> forward_iterator lower_bound( forward_iterator first, forward_iterator last, const TYPE& val ); forward_iterator lower_bound( forward_iterator first, forward_iterator last, const TYPE& val, CompFn f );
The lower_bound
function is a type of binary search. This function searches
for the first place that val
can be inserted into the ordered range defined by
first
and last
that will not mess up the existing ordering; or,
equivalently, it returns the iterator to the first element that is not less than val
,
or end
if all elements are less than val
.
This function requires the elements to be in order.
The return value of lower_bound
is an iterator that points to the location
where val
can be safely inserted. Unless the comparison function f
is
specified, the < operator
is used for ordering.
For example, the following code uses lower_bound
to insert the number 7 into
an ordered vector of integers:
vector<int> nums; nums.push_back( -242 ); nums.push_back( -1 ); nums.push_back( 0 ); nums.push_back( 5 ); nums.push_back( 8 ); nums.push_back( 8 ); nums.push_back( 11 ); cout << "Before nums is: "; for( unsigned int i = 0; i < nums.size(); i++ ) { cout << nums[i] << " "; } cout << endl; vector<int>::iterator result; int new_val = 7; result = lower_bound( nums.begin(), nums.end(), new_val ); nums.insert( result, new_val ); cout << "After, nums is: "; for( unsigned int i = 0; i < nums.size(); i++ ) { cout << nums[i] << " "; } cout << endl;
The above code produces the following output:
Before nums is: -242 -1 0 5 8 8 11 After, nums is: -242 -1 0 5 7 8 8 11
lower_bound
runs in logarithmic time for containers that support random access, and in linear time for all other containers. It always makes O(log n) comparisons, though.
Related Topics: binary_search, equal_range, upper_bound