有关lower_bound()函数的使用
2024-10-19 12:03:05
lower_bound()函数需要加载头文件#include<algorithm>,其基本用途是查找有序区间中第一个大于或等于某给定值的元素的位置,其中排序规则可以通过二元关系来表示。
函数原型:
template<class ForwardIterator, class Type>
ForwardIterator lower_bound(
ForwardIterator _First,
ForwardIterator _Last,
const Type& _Val
);
template<class ForwardIterator, class Type, class BinaryPredicate>
ForwardIterator lower_bound(
ForwardIterator _First,
ForwardIterator _Last,
const Type& _Val,
BinaryPredicate _Comp
); 传入参数说明:
_First 要查找区间的起始位置
_Last 要查找区间的结束位置
_Val 给定用来查找的值
_Comp 自定义的表示小于关系的函数对象,根据某个元素是否满足小于关系而返回true或者false
举例说明:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> v;
int main()
{
for (int i = 1; i < 4; i++)
v.push_back(2 * i);//注意此时v中的元素本身就是有序的
vector<int>::iterator it = lower_bound(v.begin(), v.end(), 3);
cout << *it << endl;
return 0;
}
上面的例子是针对容器的,注意返回的是距离元素3最近的指针it,输出的是*it结果为元素4,假如我想得到位置而非具体的元素应该怎么办呢?这里有一个指针偏移的技巧,只需要减去起始位置的指针即可,代码如下:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> v;
int main()
{
for (int i = ; i < ; i++)
v.push_back( * i);//注意此时v中的元素本身就是有序的
//vector<int>::iterator it = lower_bound(v.begin(), v.end(), 3);
int pos = lower_bound(v.begin(), v.end(), )-v.begin();
cout << pos<< endl;
return ;
}
这时候返回pos就是所查找元素的位置,下标,这里查找到的元素应该是4在容器中的下标是1,所以输出pos的结果就是1.对容器适用,对数组同样适用:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[4] = { 2, 4, 6, 8 }; //注意此时a中的元素本身就是有序的
int * it = lower_bound(a,a+4,3);
cout << *it<< endl;
return 0;
}
返回位置只需要减掉数组的起始位置即可:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[4] = { 2, 4, 6, 8 }; //注意此时a中的元素本身就是有序的
//int * it = lower_bound(a,a+4,3);
int pos = lower_bound(a, a + 4, 3) - a;//a表示数组的起始位置
cout <<pos<< endl;
return 0;
}
结果和容器的时候是一样的。
对于4个参数的情形,最后一个参数的自己定义的表示大小关系函数的对象,常用的逆序可以加载头文件#include<functional>,里边有一个greater<int>()函数即可对逆序求最近位置。假如说像上边一样元素为2 4 6 8,逆序则是8 6 4 2,那么求距离3最近表示的是与3最近的小于等于3的元素,输出结果则是元素2了,代码如下:
说明,要查找的有序序列必须是合法的,已经被排序的序列。
最新文章
- 解除win7网络限速.
- Junit mockito 测试Controller层方法有Pageable异常
- [tem]线段树(白书版)
- VirtualBox安装Ghost XP
- Oracle误删恢复
- C语言基础题
- 《深入理解Java虚拟机》学习笔记之类加载
- [HNOI2008]越狱
- Powershell-查询当前文件目录层级结构
- CMake根据平台移植检查设置文件编译选项
- VS2019预览版发布了
- IDAPython脚本之收集函数的调用信息
- 【托业】【新东方全真模拟】01~02-----P5~6
- mock时忽略不必要的初始化
- loadrunner11--基础使用
- MD5加密概述
- nmap常用扫描命令
- 洛谷P3197 HNOI2008 越狱
- 服务器Windows 2008 R2 安装SQL 2008 R2
- zblog添加水印插件后出现Cannot use $this as parameter
热门文章
- Thinkphp5.0 的视图view的模板布局
- 如何爬取可用的IP代理
- P1334 瑞瑞的木板 洛谷
- SecurityContextHolder.getContext().getAuthentication()为null的情况
- wget: unable to resolve host address “mirrors.163.com” 的解决办法
- 物理内存、虚拟内存、buffers、cached、共享内存、swap
- 【转】配置windows路由表,使电脑同时连接内网外网方法
- [Java Sprint] Spring XML Configuration : Setter Injection Demo
- react jsx 常见问题
- 有时候当你改动了xib &;#160; 你调试,各种改的时候又没变化的时候