【STL】binart_search、lower_bound、upper_bound详解 | STL二分算法 | STL底层源码解析

STL二分算法 STL二分算法的基本使用 如何用STL二分算法查找元素是否存在 如何用STL二分算法查找元素的位置 如何自定义STL二分算法查找规则 STL二分算法如何处理降序数组 STL二分算法的内部源码解析 STL二分算法如何查找升序数组上下界 STL二分算法如何查找降序数组上下界 阅读详情

1.头文件

#include <algorithm>

2.使用方法

1.binary_search:查找某个元素是否出现。(范围包括前, 不包括尾)

函数模板:普通数组: binary_search(arr[], arr[] + size, val)

​ vector: binary_search(arr.begin(), arr.end(), val)

​ binary_search(arr.begin(), arr.begin() + cnt, val)

函数功能: 在数组中以二分法检索的方式查找,若在数组(要求数组元素升序)中查找到val元素则返回true,若查找不到则返回false。

如果数组是降序怎么办?

bool cmp(int a, int b) return a > b;
binary_search(arr.begin(), arr.end(), val, cmp);

重新定义二分规则

#include<bits/stdc++.h>
using namespace std;
vector<int>x = { 0, 2, 3, 3, 4, 5, 6, 9, 10, 11 };
vector<int>y = { 11, 10, 9, 6, 5, 4, 3, 3, 2, 0 };
vector<int>z = { 0, 2, 3, 3, 4, 5, 9, 7, 6, 11 };
bool cmp(int a, int b) { //从左往右找数组第一个小于等于val的
	return a > b;		 //规则是传入的val大于数组中的值, 但是函数要找第一个违反规则的
}
int main()
{
	for(int i = 0;i <= 11; i++)cout << binary_search(x.begin(), x.end(), i); 
	puts("      升序结果");
	for (int i = 0; i <= 11; i++)cout << binary_search(y.begin(), y.end(), i, cmp);
	puts("      降序+规则结果");
	for (int i = 0; i <= 11; i++)cout << binary_search(z.begin(), z.end(), i);
	puts("      半升序结果, 5之前满足升序可以正常判断, 后面部分都不能正常判断");
}

在这里插入图片描述

binary_search 算法底层实现

//第一种语法格式的实现
template <class ForwardIterator, class T>
bool binary_search (ForwardIterator first, ForwardIterator last, const T& val)
{
    first = std::lower_bound(first,last,val);
    return (first!=last && !(val<*first));
}
//第二种语法格式的底层实现
template<class ForwardIt, class T, class Compare>
bool binary_search(ForwardIt first, ForwardIt last, const T& val, Compare comp)
{
    first = std::lower_bound(first, last, val, comp);
    return (!(first == last) && !(comp(val, *first)));
}

其使用的lower_bound() 查找第一个大于等于val的元素, 如果lower_bound() 返回值有解且等于val 那就找到了

这里传入的规则, 其实是传入给lower_bound()一个规则, 更改二分查找方式, 如果lower_bound()返回值有解, 并且结果不满足规则 (这里为什么是不满足规则, 是因为lower_bound函数就是找首个不满足规则的数据, 具体看后面)


2.lower_bound:查找第一个大于或等于某个元素的位置。

函数模板:普通数组: lower_bound(arr[], arr[] + size, val)

​ vector: lower_bound(arr.begin(), arr.end(), val)

​ lower_bound(arr.begin(), arr.begin() + cnt, val)

函数功能: 函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置(注意是地址)。如果所有元素都小于val,则返回last的位置

这里同样也只支持升序, 不支持降序数组

解决方法: 使用自定义规则

#include<bits/stdc++.h>
using namespace std;
vector<int>x = { 0, 2, 3, 3, 4, 5, 6, 9, 10, 11 };
vector<int>y = { 11, 10, 9, 6, 5, 4, 3, 3, 2, 0 };
vector<int>z = { 0, 2, 3, 3, 4, 5, 9, 7, 6, 11 };
bool cmp(int a, int b) { //从左往右找数组第一个小于等于val的
	return a > b;		 //规则是传入的val大于数组中的值, 但是函数要找第一个违反规则的
}
int main()
{
	for(int i = 0;i <= 11; i++)cout << lower_bound(x.begin(), x.end(), i) - x.begin();
	puts("      升序结果");
	for (int i = 0; i <= 11; i++)cout << lower_bound(y.begin(), y.end(), i, cmp) - y.begin();
	puts("      降序+规则结果");
	for (int i = 0; i <= 11; i++)cout << lower_bound(z.begin(), z.end(), i) - z.begin();
	puts("      半升序结果, 5之前满足升序可以正常判断, 后面部分不能正常判断");
}

在这里插入图片描述


3.upper_bound:查找第一个大于某个元素的位置。

函数模板:普通数组: upper_bound(arr[], arr[] + size, val)

​ vector: upper_bound(arr.begin(), arr.end(), val)

​ upper_bound(arr.begin(), arr.begin() + cnt, val)

函数功能: 函数upper_bound()在first和last中的前闭后开区间进行二分查找,返回大于val的第一个元素位置(注意是地址)。如果所有元素都小于val,则返回last的位置

upper_bound 和 lower_bound 区别: 前者仅大于, 后者则找大于等于

#include<bits/stdc++.h>
using namespace std;
vector<int>x = { 0, 2, 3, 3, 4, 5, 6, 9, 10, 11 };
vector<int>y = { 11, 10, 9, 6, 5, 4, 3, 3, 2, 0 };
vector<int>z = { 0, 2, 3, 3, 4, 5, 9, 7, 6, 11 };
bool cmp(int a, int b) { //从左往右找数组第一个小于val的
	return a >= b;		 //规则是传入的val大于等于数组中的值, 但是函数要找第一个违反规则的
}
int main()
{
	for(int i = 0;i <= 11; i++)cout << upper_bound(x.begin(), x.end(), i) - x.begin();
	puts("      升序结果");
	for (int i = 0; i <= 11; i++)cout << upper_bound(y.begin(), y.end(), i, cmp) - y.begin();
	puts("      降序+规则结果");
	for (int i = 0; i <= 11; i++)cout << upper_bound(z.begin(), z.end(), i) - z.begin();
	puts("      半升序结果, 5之前满足升序可以正常判断, 后面部分不能正常判断");
}

在这里插入图片描述


3. 关于STL二分底层与自定义规则详解!!

※※※※※※※※※※※※※※※※※※※※※※※这是重点内容※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

学会了这个, 才能真正会用, 熟练掌握STL二分算法函数

基础的规则分为4个

bool cmp1(int a, int b) { //从左往右找数组第一个小于等于val的
	return a > b;		  //规则是传入的val大于数组中的值, 但是函数要找第一个违反规则的
}
bool cmp2(int a, int b) { //从左往右找数组第一个小于val的
	return a >= b;		  //规则是传入的val大于等于数组中的值, 但是函数要找第一个违反规则的
}
bool cmp3(int a, int b) { //从左往右找数组第一个大于等于val的
	return a < b;		  //规则是传入的val小于数组中的值, 但是函数要找第一个违反规则的
}
bool cmp4(int a, int b) { //从左往右找数组第一个大于val的
	return a <= b;		  //规则是传入的val小于等于数组中的值, 但是函数要找第一个违反规则的
}

那么他们放到二分函数里是什么意义呢

以lower_bound为例, lower_bound(arr.begin(), arr.end(), val, cmp)

arr : 排好序的数组

val : 要查找的值

cmp : 自定义的规则

数组x : 0, 2, 3, 3, 4, 5, 6, 9, 10, 11 (纯升序)

数组y : 11, 10, 9, 6, 5, 4, 3, 3, 2, 0 (纯降序)

y 为 x 的逆序

int main()
{
	for (int i = 0; i <= 11; i++)printf("%3d", lower_bound(x.begin(), x.end(), i) - x.begin());
	puts("      升序  默认结果");
	for (int i = 0; i <= 11; i++)printf("%3d", lower_bound(x.begin(), x.end(), i, cmp1) - x.begin());
	puts("      升序 模板1结果");
	for (int i = 0; i <= 11; i++)printf("%3d", lower_bound(x.begin(), x.end(), i, cmp2) - x.begin());
	puts("      升序 模板2结果");
	for (int i = 0; i <= 11; i++)printf("%3d", lower_bound(x.begin(), x.end(), i, cmp3) - x.begin());
	puts("      升序 模板3结果");
	for (int i = 0; i <= 11; i++)printf("%3d", lower_bound(x.begin(), x.end(), i, cmp4) - x.begin());
	puts("      升序 模板4结果");
}

在这里插入图片描述

可以明显发现一些特点

  1. 默认结果与模板3结果相同, 其都是查找第一个大于等于val的位置
  2. 模板4结果与默认结果略有偏差, 其查找第一个大于val的位置
  3. 模板1和模板2结果明显错误, 其不能用于查找升序数组

下面是用upper_bound() 产生的结果, 和上面除了默认不同, 其余都是一样的

在这里插入图片描述


假如换上降序的数组y呢???

int main()
{
	for (int i = 0; i <= 11; i++)printf("%3d", upper_bound(y.begin(), y.end(), i) - y.begin());
	puts("      降序  默认结果");
	for (int i = 0; i <= 11; i++)printf("%3d", upper_bound(y.begin(), y.end(), i, cmp1) - y.begin());
	puts("      降序 模板1结果");
	for (int i = 0; i <= 11; i++)printf("%3d", upper_bound(y.begin(), y.end(), i, cmp2) - y.begin());
	puts("      降序 模板2结果");
	for (int i = 0; i <= 11; i++)printf("%3d", upper_bound(y.begin(), y.end(), i, cmp3) - y.begin());
	puts("      降序 模板3结果");
	for (int i = 0; i <= 11; i++)printf("%3d", upper_bound(y.begin(), y.end(), i, cmp4) - y.begin());
	puts("      降序 模板4结果");
}

在这里插入图片描述

可以明显发现一些特点

  1. 模板1结果查找第一个小于val的位置
  2. 模板2结果查找第一个小于等于val的位置
  3. 模板1和模板2, 默认结果结果明显错误, 其不能用于查找升序数组

诶??? 是不是不太对, 怎么和模板表达的意思不一样, 不应该是模板1表示小于等于, 模板2表示小于才对

换成upper_bound试试

int main()
{
	for (int i = 0; i <= 11; i++)printf("%3d", lower_bound(y.begin(), y.end(), i, cmp1) - y.begin());
	puts("      降序 模板1结果");
	for (int i = 0; i <= 11; i++)printf("%3d", lower_bound(y.begin(), y.end(), i, cmp2) - y.begin());
	puts("      降序 模板2结果");
}

在这里插入图片描述

这回就正确了

  1. 模板1结果查找第一个小于等于val的位置
  2. 模板2结果查找第一个小于val的位置

**注意: ** 如果使用降序模板查找降序数组, 使用 lower


!!!关于自定义的规则为何代表了某个含义, 见自定义规则代码注释

a 代表二分函数中的 val

b 代表待查找的数组数据


4.如何用STL二分查找范围内的上界和下界

数组升序:

lower_bound(iter.begin(), iter.end(), x)寻找 ∗ i t ≥ x *it\ge x ∗it≥x的下界,如果返回 i t e r . e n d ( ) iter.end() iter.end()说明无解
upper_bound(iter.begin(), iter.end(), x)寻找 ∗ i t > x *it> x ∗it>x的下界,如果返回 i t e r . e n d ( ) iter.end() iter.end()说明无解
lower_bound(iter.begin(), iter.end(), x) - 1寻找 ∗ i t < x *it< x ∗it<x的上界,如果返回 i t e r . b e g i n ( ) − 1 iter.begin()-1 iter.begin()−1说明无解
upper_bound(iter.begin(), iter.end(), x) - 1寻找 ∗ i t ≤ x *it\le x ∗it≤x的上界,如果返回 i t e r . b e g i n ( ) − 1 iter.begin()-1 iter.begin()−1说明无解

以数组 x : 0, 2, 3, 3, 3, 3, 6, 9, 10, 11 为例

int main()
{
	auto f1 = lower_bound(x.begin(), x.end(), 3) - x.begin();		// [3,+∞) 下界
	auto f2 = upper_bound(x.begin(), x.end(), 3) - x.begin();		// (3,+∞) 下界
	auto f3 = lower_bound(x.begin(), x.end(), 3) - 1 - x.begin();	// (-∞,3] 上界
	auto f4 = upper_bound(x.begin(), x.end(), 3) - 1 - x.begin();	// (-∞,3) 上界
	cout << f1 << " " << f2 << " " << f3 << " " << f4 << endl;
}

输出结果: 2 6 1 5

数组降序:

upper_bound(y.begin(), y.end(), 3, cmp1) - 1
upper_bound(y.begin(), y.end(), 3, cmp2) - 1
lower_bound(y.begin(), y.end(), 3, cmp1)
lower_bound(y.begin(), y.end(), 3, cmp2)

以数组 y : 11, 10, 9, 6, 3, 3, 3, 3, 2, 0 为例

bool cmp1(int a, int b) { //从左往右找数组第一个小于等于val的
	return a > b;		  //规则是传入的val大于数组中的值, 但是函数要找第一个违反规则的
}
bool cmp2(int a, int b) { //从左往右找数组第一个小于val的
	return a >= b;		  //规则是传入的val大于等于数组中的值, 但是函数要找第一个违反规则的
}
int main()
{
	auto f1 = upper_bound(y.begin(), y.end(), 3, cmp1) - 1 - y.begin();	// [3,+∞) 下界
	auto f2 = upper_bound(y.begin(), y.end(), 3, cmp2) - 1 - y.begin();	// (3,+∞) 下界
	auto f3 = lower_bound(y.begin(), y.end(), 3, cmp1) - y.begin();		// (-∞,3] 上界
	auto f4 = lower_bound(y.begin(), y.end(), 3, cmp2) - y.begin();		// (-∞,3) 上界
	cout << f1 << " " << f2 << " " << f3 << " " << f4 << endl;
}

输出结果: 7 3 4 8

C++中的binary_search函数详解 是C++ STL中的一个强大工具,它可以帮助我们在已排序的序列中快速查找元素。然而,使用它时需要注意一些事项,包括确保输入范围已排序,理解其返回值的含义,以及如何使用自定义比较函数。是一个非常有用的函数,它可以在一个已排序的序列中查找一个特定的元素。这个函数的使用非常直观,但是了解其工作原理和一些注意事项可以帮助我们更有效地使用它。它会在输入范围内查找这个值,并返回一个布尔值,表示这个值是否存在。的时间复杂度为O(log n),其中n是输入范围中的元素数量。在这个例子中,我们定义了一个自定义的比较函数。 阅读详情

相关推荐

时间同步中 TOD 与GPRMC和IRIG-B的区别

时间同步中 TOD 与GPRMC和IRIG-B的区别

ftdlk的博客 1727

【C++】C++11 STL算法(四):二分查找法(Binary search operations)、合并操作

头文件:#include <algorithm> 一、lower_bound 1、原型: template< class ForwardIt, class T > ForwardIt lower_bound( ForwardIt first, ForwardIt last, const T& value ); template< class ForwardI...

郭老二 1812

Unity Scriptable Build Pipeline (SBP) 详解

Unity 的可编程构建管线(Scriptable Build Pipeline, SBP)标志着引擎构建架构的一次关键转变,它从不透明的 C++ 实现转向了灵活、可扩展的 C# 框架。SBP 旨在满足现代游戏开发日益增长的需求,通过改进增量处理和高效缓存机制显著提升了构建性能。它赋予开发者对内容构建过程前所未有的控制力,从而能够针对特定项目需求进行深度定制。尽管 SBP 是 Unity 推荐的 Addressables 系统的重要基础层,但理解其核心组件、构建流程和高级功能对于优化大型项目、简化 CI/C

m0_57771536的博客 2209

C++中stl库的标准二分函数

使用C++中algorithm头文件下面的的标准二分函数,不需要手动实现,高效快捷不易出错

zyxzyx666的博客 752

中国30米分辨率城市建成区数据集 (1972-2023年)

全国城市建成区空间分布数据(1972-2023年),利用Google Earth Engine平台,基于Landsat系列遥感影像提取了1972–2023年城市不透水面,后经过不透水面聚集密度计算方法计算了不透水面聚集密度,通过阈值划分提取了城市建成区,并设置了建成区面积阈值,去除了噪点,获取了全国城市建成区空间分布数据集。该提取能准确刻画城市形态,提取精度高,保持了建成区的完整性。数据集包括41期数据,1972年,1978年,1985-2023年逐年,分辨率为30米,有栅格和矢量两种格式。

地球资源数据云的官方博客 5825

Java开发者必看:WPS Office在线预览接入实战(含回调配置避坑指南)

本文为Java开发者提供了WPS Office在线预览功能的完整接入实战指南。详细解析了从服务申请、生成带签名的访问URL,到实现核心回调接口(文件信息、用户信息、文件保存)的全流程,并重点分享了签名算法与回调配置中的关键避坑点,帮助开发者高效集成,提升Web应用文档处理体验。

vodka的博客 1329

用stl函数来实现二分查找

算法日记(一)_m0_61723200的博客-优快云博客 之前在这篇文章用的是自定义函数的方法进行二分查找的,今天我会用stl函数进行二分查找. binary_search:查找某个元素是否出现,返回bool型。 lower_bound:查找第一个大于或等于某个元素的位置。 upper_bound:查找第一个大于某个元素的位置。 先看道二分查找的题 二分搜索基础版 Description 给你一个长度为n的排列有序从小到大递增的数组, 还有q次查询, 询问一个数字在这个数组中出.

m0_61723200的博客 1704

k8s集群部署私有镜像仓库

本文介绍了在Kubernetes集群中部署私有镜像仓库的完整方案。使用registry:2镜像创建Deployment,通过NodePort(30500)暴露服务,并采用hostPath(/data/registry)实现数据持久化。部署过程包括节点标记、YAML配置、资源创建及验证步骤,同时提供了Docker和Containerd两种环境下的详细使用方法,包括配置不信任私有仓库、镜像推送/拉取操作指南。该方案特别适合开发测试环境,为团队提供便捷的本地镜像管理能力。

weixin_42728286的博客 893

二分小细节的问题+STL中的二分函数

当a[mid]=num时,我们要在mid左半边的区间里查找目标值num,因为右半边不包含我们的目标值,但在mid这一点是有可能等于num的,所以r=mid,else l=mid+1;用二分法的条件:(1)数列是有界的;空间复杂度:o(1);

2301_79290155的博客 625

Skills入门学习路线

简单来说,Skills就像是给Claude准备的”插件包"或”工具箱”。它是一个集合,里面装了特定的操作指令(Instructions)、可执行脚本(Scripts)和相关素材(Resources)。2025 年 10 月中旬,Anthropic 正式发布 Claude Skills。两个月后,Agent Skills 作为开放标准被进一步发布,意在引导一个新的 AI Agent 开发生态。OpenAI、Github、VS Code、Cursor 均已跟进。为了更好的理解,你可以把。

十二测试录 1098

端到端自动驾驶:特斯拉FSD Beta技术拆解

端到端自动驾驶:特斯拉FSD Beta技术拆解 ,人工智能,计算机视觉,大模型,AI,这篇文章围绕特斯拉FSD Beta的端到端自动驾驶技术展开,先介绍端到端自动驾驶的定义、与传统方案的区别及FSD Beta的特点,再阐述其硬件基础、技术架构,解析关键技术,还涉及训练数据与标注、安全与冗余设计、实际应用场景与挑战以及技术迭代与更新等内容,展现了该技术的多方面情况。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

C++STL标准库学习笔记(二)二分查找

这篇文章简单介绍了STL标准库中的二分查找算法: binary_search lower_bound upper_bound

AwakeFantasy的博客 3782

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

STL二分查找

本课主要介绍容器部分里面的二分查找函数。涉及的函数有 3 个,这 3 个函数的强两个输入参数都和迭代器有关,或者说参数是可以迭代的,而第三个参数则是你要查找的值。

dazys的博客 860

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

lower_bound()和upper_bound( )函数详解

lower_bound()和upper_bound( )函数

m0_72542983的博客 2345

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

对lower_bound/upper_bound 二分的介绍

在竞赛中如果能够熟练掌握这个函数是非常有用的! lower_bound的第三个参数传入一个元素x,在两个迭代器(或指针)指定的部分上执行二分查找,返回指向第一个大于等与x的元素的位置的迭代器(或指针)。 upper_bound的用法和lower_bound大致相同,唯一的区别是查找第一个大于x的元素。当然,两个迭代器(或指针)指定的部分应该是提前排好序的。 在有序int数组(元素存放在下标1...

Nerdant 397

lower_bound( )和upper_bound( )排序之二分法应用

lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的。 在从小到大的排序数组中, lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。 upper_...

小吕的博客 534

15分钟带你了解lower_bound和upper_bound

一文讲解lower和upper

贤鱼的博客 1505

【二分—STL】lower_bound()函数&&upper_bound()函数的使用总结

2、返回的是地址,不是那个要查找的数的下标,所以就注定了在这个函数的后边就要减去这个数组的数组名,即这个数组的首地址。② lower_bound(a + 1, a + 1 + n, b[i] ) - a 返回a数组中第一个大于等于b[i]的下标。②upper_bound( c + 1, c + 1 + n, b[i] ) - c 返回c数组中第一个大于b[i]的下标。①lower_bound(a + 1, a + 1 + n, b[i] ) 返回a数组中第一个大于等于b[i]的地址。

weixin_64565994的博客 8706

C++ STL lower_bound & upper_bound

background首先,lower_bound和upper_bound是C++ STL中提供的非常实用的函数。其操作对象可以是vector、set以及map。lower_bound返回值一般是>= 给定val的最小指针(iterator)。upper_bound返回值则是 > 给定val的最小指针(iterator)。vector中的lower_bound & upper_bound// lowe

二十三小时 1万+

STL中二分查找函数

这个函数同样可以用来获取元素的位置(通过减去范围的起始迭代器),但它是查找大于给定值的第一个元素。这些STL函数大大简化了二分查找的实现,并且由于它们是库函数,通常经过了优化,因此在性能上也是很好的。这个函数返回的迭代器可以用来获取元素的位置(通过减去范围的起始迭代器)。函数用于判断一个元素是否存在于已排序的范围内。这个函数只告诉你元素是否存在,但不返回元素的位置。函数用于查找第一个不小于给定值的元素。函数用于查找第一个大于给定值的元素。如果不存在,则返回的结果与。的元素的迭代器(如果所有元素都小于。

2301_79470071的博客 743

【C++】从没见过这么详细的lower_bound的讲解

我这两个函数在牛客上做题见到,就充满疑惑这两个函数还有第二种接口??,我上C++官网去学习,例子就一个是最基础的,我看明白了。虽然是两个函数的接口就两个,但是有时候看别人使用的时候,里面参数还可以放不同的仿函数,我懵逼了。就去网上搜,但是大家讲解的都是它的第一个接口。我只能再把文档一遍一遍过,代码一遍遍的尝试,调试。 终于,我花了一天时间把这个函数才终于依靠着调试和 模仿着别人接口的使用,慢慢调弄...

进阶之路 5万+

C++中的STL标准库常用函数lower_bound()、upper_bound()、equal_range() 以及 binary_search() 的用法

lower_bound() 函数定义在。

Sory22的博客 3055

STL算法中upper_bound()

Upper_bound()在前闭后开区间查找的关键字的上界,返回大于val的第一个元素位置。 首先介绍的是第一种用法:查找比某个元素大的第一个的值。 代码如下: vector<int> a = { 0,2,1,5,8,7,4,9,6 }; vector<int>::iterator ite; for_each(a.begin(), a.e...

qq_41979469的博客 694

STL大法之二分函数

*作用:将数组 $a$ 中区间 $[first,last]$ 的一个第 $num+1$ 大的数放在第 $num$ 个位置,这时数组会被打乱。$upper$_$bound(a+first,a+last+1,y)$**作用:返回区间 $a$ 内第一个大于 $y$ 的数的地址。**作用:将数组 $a$ 中有序区间 $[x1,y1]$ 与数组 $b$ 中有序区间 $[x2,y2]$ 合并至数组 $c$ 中。**作用:二分寻找数组 $a$ 中区间 $[first,last]$ 中是否有 $y$。

lu_2023的博客 1092

STL中的lower_bound()、upper_bound()函数用法

STL中的lower_bound()、upper_bound()函数用法

m0_73852700的博客 246
上一篇: 【前端】CSS页面布局 | float浮动布局
下一篇: 【C语言】总结C/C++中的预处理 | 关键字define | 宏定义 | 带参宏
MuShan-bit
博客等级 码龄5年 538粉丝 30原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MuShan-bit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值