C++ STL 三种二分查找归纳

本文详细介绍了STL中的三种二分查找方法:binary_search,lower_bound和upper_bound,探讨了它们在已排序容器中查找元素的应用,以及如何通过返回值定位元素位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STL二分查找

在STL里面有binary_searchlower_bound , upper_bound 三种二分查询的方法,复杂度都为log(n);在一些查找题目里面,作用很大;

前提
三种查找都是基于要查找的容器是已经排好序的情况下( 必须为从小到大排),这个容器可以是数组,结构体,map,set,vector;

返回值
比较头疼的是三种查找的返回值

  1. binary_search的返回值是false或true;当找到元素时返回true,没有找到返回false;
  2. lower_bound的返回值是跟查找元素一样大,或者比查找元素大的第一个元素的下标(等于优先,如果没有等于就是第一个大于);这里的下标在每个容器里都是不一样的,在数组里面是数组下标,在STL容器中是迭代器指针;所以要知道准确位置还要减去数组原来的下标,或者迭代器的begin()指针(这里有误,如果是set容器,不能加减);
  3. upper_bound跟lower_bound不同的是返回值是比查找元素大的第一个元素的下标,没有等于;其他的相同;

运用
一般是用binary_search查找容器中是否有这个元素;
而lower_bound和upper_bound除了这个作用之外还有求要查找元素的具体位置的作用;

一个数组a序列:1,2,3,4,5,6,7,8.设要查找数字0,6,111. pos为查找元素位置的下标

pos = lower_bound( a, a + 8, 0) - a,pos = 0.即a数组的下标为0的位置。(也就是没有找到)

pos = lower_bound( a, a + 8, 6) - a, pos = 5,即a数组的下标为5的位置(即6所在的位置)。

pos = lower_bound( a, a + 8, 111) - a, pos = 8,即number数组的下标为8的位置(但下标上限为7,所以返回最后一个元素的下一个元素,相当于没有找到)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值