STL-二分查找函数

WARNING!

本博文为算法笔记,恐说明错误,不建议参考本文


binary_serch:查找某个元素是否出现,返回bool型
lower_bound:查找第一个>=某个元素的位置
upper_bound:查找第一个>某个元素的位置

  1. binary_search(beg,end,val)
    返回一个bool变量,以二分法检索的方式在[beg,end]之间查找val,找到返回true,找不到返回false。用法与sort相似,binary_search(a+1,a+n+1,搜索的数)

  2. lower_bound(beg,end,val)
    返回一个迭代器,指向非递减序列[first,last]中的第一个大于等于(>=)val的位置。
    例:查找3出现的第一个位置,如果直接用lower_bound(a+1,a+n+1,搜索的数)输出的内容为地址,所以需要转换,有以下两种方法
    (1)使用指针变量记录下a[1]的地址,后面通过相减计算出当前查找数的下标;
    (2)用结构体储存数值和下标;

  3. 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

posted @ 2023-07-03 15:34  Momo·Trace  阅读(60)  评论(0)    收藏  举报
相关博文:
阅读排行:
· 从被喷“假开源”到登顶 GitHub 热榜,这个开源项目上演王者归来!
· Stack Overflow,轰然倒下!
· Cursor 1.2重磅更新,这个痛点终于被解决了!
· 上周热点回顾(6.30-7.6)
· .NET AI 模板
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起