equal_range()、lower_bound()和upper_bound()三个算法提供了二分查找的形式它们指出了一个值应该被插入在容器中的哪个位置同时保留容器的排列顺序
1、equal_range()
equal_range()返回一对iterator 第一个iterator 表示由lower_bound()返回的iterator 值,第二个表示由upper_bound()返回的iterator 值。
2、lower_bound()
函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置。
3、upper_bound()
函数upper_bound()返回的在前闭后开区间查找的关键字的上界,返回大于val的第一个元素位置.
举个例子
void test_vector()
{
vector<int> vd;
for (int i = 1; i <5; i++)
vd.push_back(i);
vd.push_back(3);
sort(vd.begin(), vd.end());
int pos = lower_bound(vd.begin(), vd.end(), 3) - vd.begin();
cout<<"pos:"<<pos<<endl;
pos = upper_bound(vd.begin(), vd.end(), 3) - vd.begin();
cout<<"pos:"<<pos<<endl;
typedef vector<int>::iterator vc_itor;
pair<vc_itor, vc_itor> itor_p;
itor_p = equal_range(vd.begin(), vd.end(), 3);
cout<<"firse pos :"<<(itor_p.first - vd.begin())<<" secode pos :"<<(itor_p.second - vd.begin())<<endl;
}
执行结果
pos:2
pos:4
firse pos :2 secode pos :4