news 2026/6/11 0:10:53

关于STL的知识:集合算法,你学会了吗

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于STL的知识:集合算法,你学会了吗

本文是集合(set)上的算法,这里的“集合”一词是元素集合的一般含义,而不仅仅是std::set,这篇文章是STL学习资源的一部分,一次一点关于STL的知识。

前提:范围已排序。即这篇文章提到的所有算法都要求输入范围是排序的。同样,它们的输出范围(当存在时)也是排序的。

二、取两个集合的部分数据

STL具有4种互补算法,可以取2个给定集合的不同部分。它们有一种常见的原型形式,输入两个范围,输出一个范围:

代码语言:C++

自动换行

AI代码解释

template<typename InputIterator1, typename InputIterator2, typename OutputIterator> OutputIterator algo(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result);

因此,对于两个排序集合A和B,可以这样调用:

代码语言:C++

自动换行

AI代码解释

algo(A.begin(), A.end(), B.begin(), B.end(), result);

result可以是vector上的std::back_inserter,也可以是任何其他输出迭代器。

假设有两个集合A和B。

2.1、std::set_difference

std::set_difference将在A中而不是B中的所有元素复制到result中。也可以称为取非(即NOT)。

示例:

展开

代码语言:C++

自动换行

AI代码解释

#include <algorithm> #include <iterator> #include <set> #include <vector> std::vector<int> A = {...} // sorted vector std::set<int> B = {...} // std::set is always sorted std::vector<int> results; std::set_difference(A.begin(), A.end(), B.begin(), B.end(), std::back_inserter(results));

2.2、std::set_intersection

std::set_intersection将既在A中也在B中的所有元素复制到result中。即交集。

2.3、std::set_union

std::set_union将A、B或两者中的所有元素复制到result中。对于同时存在于两者中的元素,将取A的版本(除非在B中出现的公共元素比在A中出现的多,在这种情况下,也取其在B中的附加版本)。

2.4、std::set_symmetric_difference

std::set_symmetric_difference只是简单地将在 A 中却不在 B 中的元素以及在 B 中却不在 A 中的元素复制到result中。

std::set_symmetric_difference是一个特别好的算法示例,虽然听起来很复杂,但它实际上非常容易理解,并且在日常编码中非常有用。这种情况在STL算法中经常发生。

三、比较两个集合

比较两个集合的算法不得不提到std::includes,因为它操作的是集合(即前面解释过的按顺序排列的元素集合)。

给定两个排序集合A和B,std::include检查B的所有元素是否也在A中。

函数原型:

代码语言:C++

自动换行

AI代码解释

template<typename InputIterator1, typename InputIterator2> bool std::includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2 );

使用方式:

代码语言:C++

自动换行

AI代码解释

bool AincludesB = std::includes(A.begin(), A.end(), B.begin(), B.end());

四、合并两个集合

4.1、std::merge

std::merge用于将两个排序集合 合并为一个排序集合。函数原型:

代码语言:JavaScript

自动换行

AI代码解释

template<typename InputIterator1, typename InputIterator2, typename OutputIterator> OutputIterator merge(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result);

给定两个排序集合A和B,将A和B合并到从result开始的排序范围中。

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

Creed —— 过场动画

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

作者头像 李华
网站建设 2026/6/10 11:17:15

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

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

作者头像 李华
网站建设 2026/6/10 11:17:13

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

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

作者头像 李华
网站建设 2026/6/9 21:35:37

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

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

作者头像 李华
网站建设 2026/6/10 11:16:25

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

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

作者头像 李华
网站建设 2026/6/10 11:16:40

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

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

作者头像 李华