STL库中的set和multiset容器中都含有lower_bound()函数和upper_bound() 函数,当然这两个函数也可以用于其他容器,比如array、vector等。
在使用时在思想上是一致的,但是用法上略有不同。我用vector和multiset这两个容器举例说明。
- 容器vector
lower_bound()函数:返回的是第一个不小于给定元素key的位置
upper_bound() 函数:返回的是第一个大于给定元素key的位置
code:
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int>v;
v.push_back(1),v.push_back(2),v.push_back(2);
v.push_back(3),v.push_back(3),v.push_back(40);
v.push_back(0),v.push_back(99),v.push_back(100);
vector<int>::iterator it;
cout<<"begin: ";
for(it = v.begin() ; it != v.end(); it++)
cout<<*it<<" ";
cout<<"\n----------\n";
sort(v.begin(),v.end());
cout<<"after sort: ";
for(it = v.begin() ; it != v.end(); it++)
cout<<*it<<" ";
cout<<"\n----------\n";
vector<int>::iterator lower,upper;
//lower_bound()和upper_bound()的用法,必须在有序的情况下
lower = lower_bound(v.begin(),v.end(),2);
upper = upper_bound(v.begin(),v.end(),3);
cout << "first >= 2's pos is:" << (lower-v.begin()) << "\n";
cout << "first up 3's pos is:" << (upper-v.begin()) << "\n" ;
return 0;
}
- 容器multiset
lower_bound()函数 返回的是第一个不小于给定元素key的 值
upper_bound() 函数 返回的是第一个大于给定元素key的 值
code:
#include <iostream>
#include <set>
using namespace std;
int main ()
{
multiset<int> mymultiset;
multiset<int>::iterator itlow,itup;
//用法:同样必须是在有序的情况下才可以
for (int i=1; i<8; i++) mymultiset.insert(i*10); // 10 20 30 40 50 60 70
itlow = mymultiset.lower_bound (30); // ^ 所求的位置上的值
itup = mymultiset.upper_bound (40); // ^ 所求的位置上的值
cout<<"first >= 30's: "<<*itlow<<endl;
cout<<"first > 40's: "<<*itup<<endl;
mymultiset.erase(itlow,itup); //将30到50前的区间元素删除,剩余 10 20 50 60 70
cout << "mymultiset contains:";
for (multiset<int>::iterator it=mymultiset.begin(); it!=mymultiset.end(); ++it)
cout << ' ' << *it;
cout <<"\n";
return 0;
}