当前位置: 代码迷 >> 综合 >> STL——upper_bound lower_bound
  详细解决方案

STL——upper_bound lower_bound

热度:72   发布时间:2023-12-26 10:15:31.0

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;
}