news 2026/4/23 10:45:04

如何在C++的STL中巧妙运用std::find实现高效查找

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何在C++的STL中巧妙运用std::find实现高效查找

这篇文章展示如何在一个范围内搜索。这里坚持用标准版本的STL,并考虑由2个迭代器表示的范围。

STL可以被分成两部分:对已排序元素进行操作的部分以及对未排序元素进行操作的部分。

这种差异对搜索有两个影响:

  • 在已排序的集合中查找非常快,通常在对数时间内,而在未排序的集合中查找通常在线性时间内。

  • 在已排序范围上显示的所有方法都按照等价性(与<比较)来比较值,而在未排序范围上显示的方法则按照相等性(与==比较)来比较值。

这篇文章探讨以下3个问题:

  • 在那里吗?

  • 在哪里?

  • 应该在哪里(对于排序范围)?

二、在那里吗?

2.1、在未排序的元素上

这个问题可以用std::find来表示,并结合与范围末尾的比较:

代码语言:C++

自动换行

AI代码解释

vector<int> v = {...}; // v filled with values if (std::find(v.begin(), v.end(), 42) != v.end()) { ... }

当然,也可以用std::count来表示。

代码语言:C++

自动换行

AI代码解释

vector<int> v = {...}; // v filled with values if (std::count(v.begin(), v.end(), 42)) { ... }

返回值在if语句中隐式地转换为bool值:在这里,如果范围内至少有一个元素等于42,则计算结果为true

std::find相比,std::count方法有优点也有缺点。

std::count的优点:std::count避免与结束操作符进行比较。

std::count的缺点:

  • std::count遍历整个集合,而std::find在搜索到第一个与搜索值相等的元素时就返回。

  • std::find更好地表达了正在查找的内容。

因此,std::find更常用。

注意,要检查是否存在满足谓词而不等于值的元素,用std::count_ifstd::find_ifstd::find_if_not,这应该是必知的。

2.2、已排序元素

关于已排序元素,要用的算法是std::binary_search,直接返回一个bool值,表示搜索值是否在集合中具有等效元素。

代码语言:C++

自动换行

AI代码解释

std::set<int> numbers = {...}; // sorted elements bool is42InThere = std::binary_search(numbers.begin(), numbers.end(), 42);

三、在哪里?

更准确地说,希望获得指向搜索元素出现位置的迭代器。

3.1、在未排序的元素上

std::find。返回指向第一个和搜索值相等的元素的迭代器,如果没有找到该值,则返回指向集合末尾的迭代器。

代码语言:C++

自动换行

AI代码解释

std::vector<int> numbers = {...}; auto searchResult = std::find(numbers.begin(), numbers.end(), 42); if (searchResult != numbers.end()) { ... }

3.2、已排序元素

对于已排序的集合,STL没有像std::find那样简单的算法。但是std::find并不是真正为排序集合而设计的,因为它用的是相等而不是等价,并且它在线性时间而不是对数时间内操作。

对于给定的集合,如果确定现在和将来元素的类型的相等性与等价性是相同的,并且接受付出线性时间,std::find将是不错的选择,引起它是简单的接口。必须注意,std::find不是专门为排序范围进行操作而设计的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 18:22:57

Creed —— 过场动画

设置关卡序列添加若干个Sequence&#xff1b;对每个Sequence添加相机&#xff0c;对相机设置运动路径&#xff1b;添加一个总序列&#xff0c;以将其他序列作为子序列进行编辑&#xff1b;可创建时自动播放&#xff1b;在关卡蓝图中播放关卡序列

作者头像 李华
网站建设 2026/4/20 21:03:55

Python+Vue的 增强可视化的广州IT招聘系统Pycharm django flask

收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 基于数据挖掘的广州招聘可视化分析系统是一个创新的在线平台&#xff0c;旨在通过深入分析大数据来优化和改善广州地区的招聘流程。系统利用PythonVue语言、MySQL数据库&#xff0c;结合目…

作者头像 李华
网站建设 2026/4/19 22:30:24

导师推荐9个AI论文平台,助你轻松搞定本科生毕业论文!

导师推荐9个AI论文平台&#xff0c;助你轻松搞定本科生毕业论文&#xff01; AI 工具&#xff0c;让论文写作不再难 对于大多数本科生来说&#xff0c;毕业论文是一个既重要又令人头疼的任务。从选题到开题&#xff0c;从撰写到降重&#xff0c;每一个环节都充满了挑战。而如今…

作者头像 李华
网站建设 2026/4/19 2:52:33

2025必备!10个AI论文写作软件,研究生高效写论文神器!

2025必备&#xff01;10个AI论文写作软件&#xff0c;研究生高效写论文神器&#xff01; AI 工具助力论文写作&#xff0c;效率与质量双提升 在 2025 年的学术研究中&#xff0c;AI 工具已经成为研究生们不可或缺的得力助手。尤其是在论文写作这一关键环节&#xff0c;AI 技术的…

作者头像 李华
网站建设 2026/4/16 11:08:43

全网最全自考必备TOP9 AI论文写作软件测评

全网最全自考必备TOP9 AI论文写作软件测评 2025年自考论文写作工具测评&#xff1a;为何需要这份权威榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文写作工具在学术领域的应用日益广泛。对于自考学生而言&#xff0c;如何高效完成论文撰写、确保内容质量与格式…

作者头像 李华
网站建设 2026/4/21 4:06:48

基于Python的电子书籍制作与管理系统开题报告

本篇仅仅开题案例&#xff0c;非源码&#xff0c;感兴趣自行拓展学习! 一、研究背景与意义 &#xff08;一&#xff09;研究背景 随着数字化阅读的普及和信息技术的快速发展&#xff0c;电子书籍&#xff08;电子书&#xff09;凭借便携性、易传播、低成本等优势&#xff0c;逐…

作者头像 李华