首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >std::binary_search()查询

std::binary_search()查询
EN

Stack Overflow用户
提问于 2016-02-25 18:06:19
回答 2查看 803关注 0票数 0

我目前正在使用std::binary_search() (来自库)来确定列表中是否存在某个东西的实例。在我开始使用它之前,我想知道它是如何工作的。

我的理解是,它使用比较(对于用户定义的结构/类,它需要访问用户定义的比较函数)来确定一个对象的实例是否存在于一个列表/向量中。根据这个网站(搜索/),使用的范围是:

代码语言:javascript
运行
AI代码解释
复制
[first, last)

所以它不包括最后一个,因为它必须比较最后一个 have + 1

而且,用户定义的比较函数的逻辑并不重要,只要它区分对象/类中的属性。对吗?

例如,如果我的struct/class包含以下内容:

代码语言:javascript
运行
AI代码解释
复制
coord
{
    int X;
    int Y;
}

我必须确保我的比较函数以某种方式(例如大于/小于比较)区分列表/向量中元素a和b的X和Y属性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-25 18:50:55

std::binary_search()作为一种常见的二进制搜索算法实现,它最多执行log2(N)+1元素的比较。(有关如何实现二进制搜索的更多信息,请查看此链接)

所以,它不包括最后,因为它必须比较最后和最后+ 1?

不,原因只是为了方便使用。您可以按以下方式调用该函数:

代码语言:javascript
运行
AI代码解释
复制
std::binary_search (v.begin(), v.end(), 42)

注意,v.end()将迭代器返回到序列结束后的元素。因此,它不指向任何元素,因此不应在搜索中进行计算。

而且,用户定义的比较函数的逻辑并不重要,只要它区分对象/类中的属性。对吗?

它用于binary_search()的比较函数,以便知道您要查找的元素是否在它之后正在测试的元素之前。换句话说,如果第一个元素比第二个元素“低”,则比较函数必须能够比较两个元素并返回(必须放在第二个元素之前的容器中)。

对于Coord示例,可以编写一个比较器函数,如下所示:

代码语言:javascript
运行
AI代码解释
复制
struct lessThanKey
{
    inline bool operator() (const Coord& lhs, const Coord& rhs)
    {
        return (lhs.x < rhs.x) || ((lhs.x == rhs.x) && (lhs.y < rhs.y));
    }
};

std::binary_search(v.begin(), v.end(), Coord{42, 42}, lessThanKey());
票数 2
EN

Stack Overflow用户

发布于 2016-02-25 18:22:44

范围不包括,而不是,将最后一个元素作为一般的库约定,这意味着第一次迭代器和最后一次迭代器之间的距离等于范围中的元素数,并且可以使用以下方法在循环中测试范围:

代码语言:javascript
运行
AI代码解释
复制
while(first != last)
{
    // process stuff
    ++first;
}

必须对使用相同(可能是用户定义的)比较函数排序的已排序数据执行std::binary_search

该函数需要在两个元素之间建立一个较少的关系。

代码语言:javascript
运行
AI代码解释
复制
struct coord
{
    int x;
    int y;
};

struct CoordComparator
{
    bool operator()(const coord& lhs, const coord& rhs) const
    {
        return lhs.x == rhs.x ? lhs.y < rhs.y : lhs.x < rhs.x;
    }
};

std::vector<coord> v { {1, 1}, {2, 1}, {2, 2}, {1, 2} };

std::sort(v.begin(), v.end(), CoordComparator());

if(std::binary_search(v.begin(), v.end(), coord{2, 1}, CoordComparator()))
{
    // element found in range
}

可以定义小于关系的值,以便报告更大的值小于较低的值,从而提供反向排序的关系。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35642101

复制
相关文章
VFP上传文件前判断文件大小,超过200M不让上传
代码很简单,以下是判断文件不能超过200M cFile=Getfile("jpg|png") If !File(lcFile) Return Endif ADIR(laarray,lcFile
加菲猫的VFP
2023/01/03
1.4K0
docker 上传本地镜像_docker 上传镜像
之前通过docker搭建过jenkins+python3环境,如果想要在不同的机器上搭建一样的环境,就可以将之前搭建的镜像上传到镜像仓库,这样方便在不同的机器上快速搭建同一套环境。 如果公开的话,别人也可以用你的镜像快速搭建环境,类似于 GitHub 本地代码上传到代码仓库,再从仓库拉取代码到本地。
全栈程序员站长
2022/09/19
2.1K0
docker 上传本地镜像_docker 上传镜像
【解决方案】ElementUI图片上传前如何对尺寸进行验证并且上传到新浪SCS?
具体的属性可以查看官方文档,这里用到的是:before-upload="beforeAvatarUpload" 这个钩子函数,看名字就知道这是在图片上传前执行的方法,在此可以进行一些验证,官方给出了对图片类型以及大小的验证,接下来将实现对图片尺寸的验证.
一尾流莺
2022/12/10
1.2K0
【解决方案】ElementUI图片上传前如何对尺寸进行验证并且上传到新浪SCS?
Docker镜像详谈(2): 深入理解镜像大小
是否还记得第一个接触 Docker 的时候,你从 Docker Hub 下拉的那个镜像呢?在那个处女镜像的基础上,你运行了容器生涯的处女容器。镜像的基石作用已经很明显,在 Docker 的世界里,可以说是「No Image, No Container」。
Henry Zhang
2019/04/12
2.4K0
Docker镜像详谈(2): 深入理解镜像大小
修改nextcloud上传大小限制
修改php.ini,位置/var/www/html/3rdparty/aws/aws-crt-php
晓果冻
2023/03/08
6.7K0
修改nextcloud上传大小限制
优化Docker镜像大小方案
       我们如果使用Dockerfile来构建Docker镜像,如果一不小心就会导致镜像大小超过1G,这是非常恐怖的。一般也都是好几百兆。较大的镜像往往会导致移植,迁移缓慢。Dockerfile就像代码一样需要持续去进行优化。使用下面的4个优化方案,可以大幅度的减小镜像的大小。
拓荒者
2019/03/11
2.9K0
js表单提交前验证
<script type="text/javascript"> function check(form) {
用户5760343
2019/08/20
12.1K0
nginx限制上传大小和超时时间设置说明/php限制上传大小
现象说明: 在服务器上部署了一套后台环境,使用的是nginx反向代理tomcat架构,在后台里上传一个70M的视频文件,上传到一半就失效了! 原因是nginx配置里限制了上传文件的大小 client_max_body_size:这个参数的设置限制了上传文件的大小,可以在http、server、location三个区域里配置 [root@dev-huanqiu ~]# cat /Data/app/nginx/conf/nginx.conf ....... ....... http { include
洗尽了浮华
2018/01/23
8.3K0
上传的验证绕过
一般这种就是只是做了前端的后缀格式限制。先把马改成能正常上传的格式,开启抓包,上改了后缀的马,抓包,改马的后缀。放行。成功绕过
洛米唯熊
2019/07/25
1.5K0
镜像上传dockerhub全球可用 [免费]
一. 进入官网创建组织https://hub.docker.com/repositories图片二. 提交镜像到docker hub仓库1. 查看镜像[root@tomxiang ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEvue 1.0 63e7d56fe2e1 9 days ago 142MBwordpress latest 5e77d84d
爽朗地狮子
2022/09/19
9010
Nginx设置请求大小限制(文件上传请求大小)
将上面配置,添加到 Nginx 配置文件 nginx.conf 或者单独的配合文件中,要写在 server的外边即可
用户9006224
2022/12/21
16.7K0
matinal:python 上传多个文件
matinal
2023/10/14
2700
tomcat文件上传大小限制_tomcat调整内存大小
Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。
全栈程序员站长
2022/09/23
4.7K0
MediaWiki上传文件大小设置
MediaWiki默认最大上传文件大小为2M,碰到文件较大需要修改这个限制,需要改为8M。
py3study
2020/03/18
7K1
MediaWiki上传文件大小设置
springboot上传文件大小配置
springboot上传文件大小配置有两种方法,一种是直接再配置文件配置,一种是通过添加一个Bean来实现。
全栈程序员站长
2022/08/25
2.3K0
优化 Docker 镜像大小常见方法
平时我们构建的 Docker 镜像通常比较大,占用大量的磁盘空间,随着容器的大规模部署,同样也会浪费宝贵的带宽资源。本文将介绍几种常用的方法来优化 Docker 镜像大小,这里我们使用 Docker Hub 官方上的 Redis 镜像进行说明。
我是阳明
2020/08/11
1.1K0
优化 Docker 镜像大小常见方法
OpenStack上传raw格式的镜像
我们平常通过controller上传镜像,因为控制节点磁盘不大,所以在node1上传,将控制节点的密钥拷贝过来即可
院长技术
2020/06/13
1.5K0
docker往docker hub上传镜像
1 登陆docker地址 docker hub地址为[https://www.docker.com/] 2 自行注册成功之后,继续下面的教程。(因为是国外网站,访问会很慢,耐心等待页面加载。)
零式的天空
2022/03/27
1.2K0
nexus3 上传 docker 镜像
首先需要在客户端配置,配置文件在: /etc/docker/daemon.json
宋天伦
2023/10/21
4940
如何在github上传多个项目
作为一个新手,刚开始接触GitHub,由于因为水平不行,操作起来还是很有难度的,每次上传新的项目都传到一个仓库下面,长期下来,由于不规范的操作,导致某一个仓库下面的文件很杂论,看的时候虽然没有什么问题,但是下载下来就会出现很大问题。所以,我就摸索了一下如何在一个仓库里面上传多个项目。
java攻城狮
2020/10/10
1.6K0

相似问题

上传前调整Codeigniter镜像大小

31

上传前的Jquery文件上传大小验证

07

上传前如何验证图片大小?

16

上传前重命名镜像

10

上传前压缩iPhone镜像

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文