Upper Bound and Lower Bound Search Algo in STL
upper_bound()
returns an iterator to the elements in the given range which does not compare greater than the given value. The range given should be already sorted for upper_bound() to work properly. In other words it returns an iterator to the upper bound of the given element in the given sorted range.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
int input[] = {1,2,2,3,4,4,5,6,7,8,10,45};
vector<int> v(input, input+12);
vector<int>::iterator it1 , it2;
it1 = upper_bound(v.begin(), v.end(), 6);
/* points to eight element in v */
it2 = upper_bound(v.begin(), v.end(), 4);
/* points to seventh element in v */
}
lower_bound
method
lower_bound()
returns an iterator to the elements in the given range which does no compare less than the given value. The range given should be already sorted for lower_bound() to work properly. In other words it returns an iterator to the lower bound of the given element in the given sorted range.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main ()
{
int input[] = {1,2,2,3,4,4,5,6,7,8,10,45};
vector<int> v(input,input+12);
vector<int>::iterator it1 , it2;
it1 = lower_bound(v.begin(), v.end(), 4);
/* points to fifth element in v */
it2 = lower_bound (v.begin(), v.end(), 10);
/* points to second last element in v */
}