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  阅读(35)  评论(0编辑  收藏  举报