STL之二分查找函数
二分查找要求数组递增;
binary_search
: 查找某个元素是否出现
a.函数模板:
binary_search(arr,arr+size,indx)
b.参数说明:
arr: 数组首地址
size:数组元素个数
indx: 需要查找的值
c.函数功能:
在数组中以二分法检索的方式查找,若在数组(要求数组元素非递减)中查找到indx元素则真,若查找不到则返回值为假。
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[6]={1,2,3,2,2,2};
sort(a,a+6);
cout<<binary_search(a,a+6,3);//1
return 0;
lower_bound
:查找第一个大于或等于某个元素的位置。
a.函数模板:
lower_bound(arr[],arr[]+size , indx):
b.参数说明:
arr[]: 数组首地址
size:数组元素个数
indx: 需要查找的值
c.函数功能:
函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置(注意是地址)。如果所有元素都小于val,则返回last的下一位置
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[6]={1,2,3,2,2,2};
sort(a,a+6);//[1,2,2,2,2,3]
int cont=lower_bound(a,a+6,3)-a;//得到索引位
cout<<cont;//5
return 0;
}
upper_bound:
查找第一个大于某个元素的位置。
a.函数模板:
upper_bound(arr[],arr[]+size , indx):
b.参数说明:
arr[]: 数组首地址
size:数组元素个数
indx:需要查找的值
c.函数功能:
函数upper_bound()返回的在前闭后开区间查找的关键字的上界,返回大于val的第一个元素位置
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[6]={1,2,3,2,2,2};
sort(a,a+6);//[1,2,2,2,2,3]
int cont=upper_bound(a,a+6,2)-a;
cout<<cont;//5
return 0;
}