一句话放在前面,lower_bound和upper_bound这两个东西,在进行一串数列经过排序之后再插入元素的操作时,特别好使。
先说lower_bound
lower_bound(起始地址,结束地址,要查询的数值),返回大于等于value的第一个元素的位置。若所有的元素都小于要查询的值,则返回最后一个元素的下一个位置。
注意:lower_bound是在前闭后开的区间内进行查询
示例代码
#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(5);
v.push_back(7);
int low;
low=lower_bound(v.begin(),v.end(),3)-v.begin();
cout<<low<<endl;
}
output 3
upper_bound
lower_bound(起始地址,结束地址,要查询的数值)
同样的,upper_bound也在前闭后开的区间查找,在这里返回大于val的第一个元素位置
示例代码
#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(5);
v.push_back(7);
int up;
up=upper_bound(v.begin(),v.end(),3)-v.begin();
cout<<up<<endl;
}
output 5
binary_search()
binary_search(起始地址,结束地址,要查找的值)
函数的类型是bool类型,若找到该值返回真,否则返回假
示例代码
#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(5);
v.push_back(7);
if(binary_search(v.begin(),v.end(),10))
cout<<"Found It!"<<endl;
else
cout<<"None!"<<endl;
}
output None!