lower_bound和upper_bound是C++ STL中提供的函数。操作对象可以是vector、set以及map。
upper_bound(i):返回map中第一个大于key的迭代器指针
lower_bound(i):返回map中第一个大于或等于key的迭代器指针
vector
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;int main()
{int a[]={1,2,4,4,2,1,1,2};vector<int>v(a,a+8);sort(v.begin(),v.end());vector<int>::iterator it1,it2;it1=lower_bound(v.begin(),v.end(),2);it2=upper_bound(v.begin(),v.end(),2);//int x=it1-v.begin();cout<<"x="<<x<<endl;//int y=it2-v.begin();cout<<"y="<<x<<endl;cout<<"Pos_lower->"<<(it1-v.begin())<<endl;cout<<"Pos_upper->"<<(it2-v.begin())<<endl;return 0;
}
set
#include<iostream>
#include<set>
using namespace std;int main()
{set<int>s;set<int>::iterator it1,it2,it;for(int i=1;i<10;++i) s.insert(i);it1=s.lower_bound(3);it2=s.upper_bound(6);cout<<*(it1)<<" "<<*(it2)<<endl;//由于set中没有像vector中那样排序的概念,因此itlow - myset.begin()是错误的s.erase(it1,it2);// 删除区间内的元素,区间左闭右开for(it=s.begin();it!=s.end();++it)cout<<*it<<" ";cout<<endl;return 0;
}
map
#include<bits/stdc++.h>
using namespace std;int main ()
{map<char,int>mp;map<char,int>::iterator it1,it2,it;mp['a']=1;mp['b']=2;mp['c']=3;mp['d']=4;mp['e']=5;it1=mp.lower_bound('b');it2=mp.upper_bound('d');mp.erase(it1,it2); //区间左闭右开 for(it=mp.begin();it!=mp.end();++it)cout<<it->first<<" "<<it->second<<endl;return 0;
}