STL-二分查找函数
WARNING!
本博文为算法笔记,恐说明错误,不建议参考本文
binary_serch:查找某个元素是否出现,返回bool型
lower_bound:查找第一个>=某个元素的位置
upper_bound:查找第一个>某个元素的位置
-
binary_search(beg,end,val)
返回一个\(bool\)变量,以二分法检索的方式在\([beg,end]\)之间查找\(val\),找到返回\(true\),找不到返回\(false\)。用法与\(sort\)相似,binary_search(a+1,a+n+1,搜索的数)
-
lower_bound(beg,end,val)
返回一个迭代器,指向非递减序列\([first, last]\)中的第一个大于等于(>=)\(val\)的位置。
例:查找\(3\)出现的第一个位置,如果直接用lower_bound(a+1,a+n+1,搜索的数)
输出的内容为地址,所以需要转换,有以下两种方法
(1)使用指针变量记录下\(a[1]\)的地址,后面通过相减计算出当前查找数的下标;
(2)用结构体储存数值和下标; -
upper_bound(beg,end,val)
返回一个迭代器,指向非递减序列\([first, last]\)中的第一个大于 (>) \(val\)的位置。
- STL结构体二分查找
由于结构体不支持直接比较大小,为了能够正常使用STL二分查找函数,我们需要让结构体能够“直接比较”,这就需要用到重载运算符。
重载运算符格式如下:
bool operator 运算符 (const 结构体名称 结构体变量)const
{
return (什么时候这个运算符对结构体成立);
}
这里是当结构体中数值为升序时运算符成立,所以定义如下:
//eg
struct dat{
int num;
int z;
bool operator<(const dat aa)const
{
return z<aa.z;
}
}a[1000020];
详情页:传送门1、传送门2
本文来自小默的博客,转载请注明原文链接:https://www.cnblogs.com/momotrace/p/STL-binary-search-function.html