STL--map中的用法:std::map::lower_bound与td::map::upper_bound
iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。
iterator upper_bound( const key_type &key ):返回一个迭代器,指向键值> key的第一个元素。
lower_bound 返回值是一个指向容器中第一个元素的迭代器,该容器中的元素满足不在k的前面,(返回元素的键值>=k)
upper_bound返回值是一个指向容器中第一个元素的迭代器,该容器中的元素满足在k的后面,(返回元素的键值>k)
STL中的用法:std::lower_bound与std::upper_bound
ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)
返回一个非递减序列[first, last)中的第一个>= 值val的位置。
ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)
返回一个非递减序列[first, last)中的第一个>值val的位置。
【代码】std::lower_bound与std::upper_bound用法示例1:
#include
#include
using namespace std;
int a[15];
int main() {
int t;
cin>>t;
while (t--) {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++){
cin>>a[i];
}
int lb = lower_bound(a, a + n + 1, 2)-a; //在[a,a+n+1)中找出大于等于2的位置,这个位置是从0开始
int ub = upper_bound(a, a + n + 1, 2)-a; //在[a,a+n+1)中找出大于2的位置,这个位置是从0开始
cout<<"序列中大于等于2第一个元素的位置:"<
【测试结果】
【代码】std::lower_bound与std::upper_bound用法示例2:
#include
#include
#include
using namespace std;
int main() {
int a[]={10,20,30,20,10,10,20};
vector v(a,a+8); // 10 20 30 30 20 10 10 20
sort(v.begin(),v.end()); // 10 10 10 20 20 20 30 30
vector::iterator lb,ub;
lb=lower_bound(v.begin(),v.end(),20);
ub=upper_bound(v.begin(),v.end(),20);
cout<<"lower_bound at position " << (lb- v.begin()) << '\n';
cout<<"upper_bound at position " << (ub- v.begin()) << '\n';
return 0;
}
【测试结果】
lower_bound at position 3 upper_bound at position 6 |
#include
#include
【测试结果1】
lower_bound3=>f upper_bound4=>c |
#include
#include
【测试结果1】
lower_bound4=>c upper_bound4=>c |