STL--求交集,并集,差集(set_intersection,set_union,set_difference)

在这里插入图片描述


set_intersection(重要)

求两个有序的序列的交集.
函数声明如下:

template<class InputIterator1, class InputIterator2, class OutputIterator>OutputIterator set_intersection(InputIterator1 _First1, //容器1开头InputIterator1 _Last1,  //容器2结尾(不包含)InputIterator2 _First2, //容器2开头InputIterator2 _Last2,  //容器2结尾(不包含)OutputIterator _Result  //存放交集的容器);
template<class InputIterator1, class InputIterator2, class OutputIterator, class BinaryPredicate>OutputIterator set_intersection(InputIterator1 _First1, //容器1开头InputIterator1 _Last1,  //容器2结尾(不包含)InputIterator2 _First2, //容器2开头InputIterator2 _Last2,  //容器2结尾(不包含)OutputIterator _Result  //存放交集的容器BinaryPredicate _Comp   //自己提供的比较规则);

注意:
1.两个容器的数据必须有序
2.这个函数允许重复值,如果需要保证数据唯一,最好使用set去重再得到交集

应用举例
有两组数据,请求出它们的交集

include <iostream>
#include <vector>
#include <algorithm>
using namespace std;void Show(const vector<int>& s)//输出s的数据
{for (const auto& x : s)cout << x << " ";cout << endl;
}int main() {// 定义两个初始集合vector<int> v1 = { 1, 12, 30, 4, 5,4 };vector<int> v2 = { 4, 5, 60, 17, 8,4 };cout << "v1:"; Show(v1); cout << "v2:"; Show(v2); sort(v1.begin(), v1.end());//必须要排序 sort(v2.begin(), v2.end()); // 计算交集的方法:使用 set_intersection函数 vector<int> v3;//保存交集 set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin())); //需要利用插入迭代器 // 输出数据 cout << "v1和v2交集:"; Show(v3); return 0; 
}

如果需要去重,则代码如下:


#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;void Show(const vector<int>& s)//输出s的数据
{for (const auto& x : s)cout << x << " ";cout << endl;
}int main() {// 定义两个初始集合vector<int> v1 = { 1, 12, 30, 4, 5,4 };vector<int> v2 = { 4, 5, 60, 17, 8,4 };cout << "v1:"; Show(v1);cout << "v2:"; Show(v2);set<int>s1{ v1.begin(),v1.end() };//去重,并自动排序set<int>s2{ v2.begin(),v2.end() };//去重,并自动排序// 计算交集的方法:使用 set_intersection函数vector<int> v3;//保存交集set_intersection(s1.begin(), s1.end(),s2.begin(), s2.end(),inserter(v3, v3.begin())); //需要利用插入迭代器// 输出数据cout << "v1和v2交集:"; Show(v3);return 0;
}

set_union(重要)

求两个有序集合的并集
函数声明如下:

template<class InputIterator1, class InputIterator2, class OutputIterator>OutputIterator set_union(InputIterator1 _First1, //容器1开头InputIterator1 _Last1,  //容器2结尾(不包含)InputIterator2 _First2, //容器2开头InputIterator2 _Last2,  //容器2结尾(不包含)OutputIterator _Result  //存放并集的容器);
template<class InputIterator1, class InputIterator2, class OutputIterator, class BinaryPredicate>OutputIterator set_union(InputIterator1 _First1, //容器1开头InputIterator1 _Last1,  //容器2结尾(不包含)InputIterator2 _First2, //容器2开头InputIterator2 _Last2,  //容器2结尾(不包含)OutputIterator _Result  //存放并集的容器BinaryPredicate _Comp   //自定义比较规则);
注意:

注意:
1.两个容器的数据必须有序
2.这个函数允许重复值,如果需要保证数据唯一,最好使用set去重再得到并集

应用举例
有两组数据,请求出它们的并集

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;void Show(const vector<int>& s)//输出s的数据
{for (const auto& x : s)cout << x << " ";cout << endl;
}int main() {// 定义两个初始集合vector<int> v1 = { 1, 12, 30, 4, 50 };vector<int> v2 = { 4, 50, 60, 17, 30 };cout << "v1:"; Show(v1);cout << "v2:"; Show(v2);sort(v1.begin(), v1.end());//必须要排序sort(v2.begin(), v2.end());// 计算并集的方法:使用 set_union函数vector<int> v3;//保存并集set_union(v1.begin(), v1.end(),v2.begin(), v2.end(),inserter(v3, v3.begin())); //需要利用插入迭代器// 输出数据cout << "v1和v2并集:"; Show(v3);return 0;
}

set_difference(重要)

求两个有序集合的差集
差集:是指两个集合间的一种运算结果,它包含了属于第一个集合但不属于第二个集合的所有元素。
举例来说,若集合 A = {1, 2, 3, 4},集合 B = {3, 4, 5, 6},则 A - B 的差集为 {1, 2},这是因为 1 和 2 只在集合 A 中出现,不在集合 B 中。
函数声明如下:

template<class InputIterator1, class InputIterator2, class OutputIterator>OutputIterator set_difference(InputIterator1 _First1, //容器1开头InputIterator1 _Last1,  //容器2结尾(不包含)InputIterator2 _First2, //容器2开头InputIterator2 _Last2,  //容器2结尾(不包含)OutputIterator _Result  //存放差集的容器);
template<class InputIterator1, class InputIterator2, class OutputIterator, class BinaryPredicate>OutputIterator set_difference(InputIterator1 _First1, //容器1开头InputIterator1 _Last1,  //容器2结尾(不包含)InputIterator2 _First2, //容器2开头InputIterator2 _Last2,  //容器2结尾(不包含)OutputIterator _Result  //存放差集的容器BinaryPredicate comp    //自定义比较规则);
注意:
1.两个容器的数据必须有序
2.这个函数允许重复值,如果需要保证数据唯一,最好使用set去重再得到差集

应用举例
有两组数据,请求出A-B的差集

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;void Show(const vector<int>& s)//输出s的数据
{for (const auto& x : s)cout << x << " ";cout << endl;
}int main() {// 定义两个初始集合vector<int> v1 = { 1, 12, 30, 4, 50 };vector<int> v2 = { 4, 50, 60, 17, 30 };cout << "v1:"; Show(v1);cout << "v2:"; Show(v2);sort(v1.begin(), v1.end());//必须要排序sort(v2.begin(), v2.end());// 计算差集的方法:使用 set_difference函数vector<int> v3;//保存差集set_difference(v1.begin(), v1.end(),v2.begin(), v2.end(),inserter(v3, v3.begin())); //需要利用插入迭代器// 输出数据cout << "v1和v2差集:"; Show(v3);return 0;
}

本篇完!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jenkins配置gitee源码地址连接不上

报错信息如下&#xff1a; 网上找了好多都没说具体原因&#xff0c;最后还是看jenkins控制台输出日志发现&#xff1a; ssh命令执行失败&#xff08;git环境有问题&#xff0c;可能插件没安装成功等其他问题&#xff09; 后面发现是jenkins配置git的地方git安装路径错了。新手…

加入新数据预测,基于黏菌优化算法SMA优化SVM支持向量机回归预测(多输入单输出)

加入新数据预测&#xff0c;基于黏菌优化算法SMA优化SVM支持向量机回归预测&#xff08;多输入单输出&#xff09; 1.数据均为Excel数据&#xff0c;直接替换数据就可以运行程序。 2.所有程序都经过验证&#xff0c;保证程序可以运行。 3.具有良好的编程习惯&#xff0c;程序…

cmake find_package 使用笔记

目录 1 find_package2 config mode2.1 搜索的文件名2.2 搜索路径 3 module mode3.1 搜索的文件名3.2 搜索路径 参考 1 find_package 这是官方文档 下面是学习总结&#xff1a; 首先是find_package的作用是什么&#xff1f;引入预编译的库。 find_package有两种模式&#xff1a…

error executing init.py No module name “imp“ ida

在某论坛下了个IDA&#xff0c;打开报错No module name “imp”&#xff0c;这是由于高版本python已经移除了imp&#xff0c;新版使用import importlib。 1、打开文件D:\IDA_Pro_7.7\python\3\ida_idaapi.py 2、替换import imp 为 import importlib。 3、替换IDAPython_LoadPr…

【LInux】从动态库的加载深入理解页表机制

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

【MindSpore学习打卡】应用实践-自然语言处理-基于RNN的情感分类:使用MindSpore实现IMDB影评分类

情感分类是自然语言处理&#xff08;NLP&#xff09;中的一个经典任务&#xff0c;广泛应用于社交媒体分析、市场调研和客户反馈等领域。本篇博客将带领大家使用MindSpore框架&#xff0c;基于RNN&#xff08;循环神经网络&#xff09;实现一个情感分类模型。我们将详细介绍数据…

X86和ARM架构的服务器 的区别

X86和ARM架构的服务器各有其优缺点,并适用于不同的应用场景。 一、X86架构服务器的优缺点及应用场景: 优点: 1. 易于获取和成本较低:X86服务器在市场上品牌和型号众多,价格相对较低,适合中小型企业。 2. 处理能力强大:X86服务器通常具有强大的处理器性能,支持多核心…

CLIP-EBC:通过增强的逐块分类,CLIP能够准确计数

摘要 https://arxiv.org/pdf/2403.09281v1 CLIP&#xff08;Contrastive Language-Image Pretraining&#xff0c;对比语言-图像预训练&#xff09;模型在识别问题中表现出了卓越的性能&#xff0c;如零样本图像分类和对象检测。然而&#xff0c;由于其固有的挑战——即将计数…

Nettyの参数优化简单RPC框架实现

本篇介绍Netty调优&#xff0c;在上篇聊天室的案例中进行改造&#xff0c;手写一个简单的RPC实现。 1、超时时间参数 CONNECT_TIMEOUT_MILLIS 是Netty的超时时间参数&#xff0c;属于客户端SocketChannel的参数&#xff0c;客户端连接时如果一定时间没有连接上&#xff0c;就会…

Spring Cloud 是什么?(Spring Cloud 组件介绍)

什么是 Spring Cloud&#xff1f; Spring Cloud 是微服务系统架构的一站式解决方案&#xff0c;是各个微服务架构落地技术的集合体&#xff0c;让架构师、 开发者在使用微服务理念构建应用系统的时候&#xff0c; 面对各个环节的问题都可以找到相应的组件来处理&#xff0c;比…

二叉树的遍历算法:前序、中序与后序遍历

在数据结构与算法中&#xff0c;二叉树的遍历是基础且重要的操作之一&#xff0c;它允许我们按照某种顺序访问树中的每个节点。常见的二叉树遍历方式有前序遍历&#xff08;Preorder Traversal&#xff09;、中序遍历&#xff08;Inorder Traversal&#xff09;和后序遍历&…

React 19 竞态问题解决

竞态问题/竞态条件 指的是&#xff0c;当我们在交互过程中&#xff0c;由于各种原因导致同一个接口短时间之内连续发送请求&#xff0c;后发送的请求有可能先得到请求结果&#xff0c;从而导致数据渲染出现预期之外的错误。 因为防止重复执行可以有效的解决竞态问题&#xff0…

聊天广场(Vue+WebSocket+SpringBoot)

由于心血来潮想要做个聊天室项目 &#xff0c;但是仔细找了一下相关教程&#xff0c;却发现这么多的WebSocket教程里面&#xff0c;很多都没有介绍详细&#xff0c;代码都有所残缺&#xff0c;所以这次带来一个比较完整得使用WebSocket的项目。 目录 一、效果展示 二、准备工…

html+css+js图片手动轮播

源代码在界面图片后面 轮播演示用的几张图片是Bing上的&#xff0c;直接用的几张图片的URL&#xff0c;谁加载可能需要等一下&#xff0c;现实中替换成自己的图片即可 关注一下点个赞吧&#x1f604; 谢谢大佬 界面图片 源代码 <!DOCTYPE html> <html lang&quo…

内存对齐宏ALIGN的理解

内存对齐宏ALIGN的理解 在Android Camera HAL代码中经常看到ALIGN这个宏&#xff0c;主要用来进行内存对齐&#xff0c;下面是v4l2_wrapper.cpp中ALIGN的一些定义 //v4l2_wrapper.cpp中内存分配进行对其的操作和定义#define ALIGN( num, to ) (((num) (to-1)) & (~(to-1)…

【Android】自定义换肤框架03之自定义LayoutInflaterFactory

AppCompatActivity是如何创建View的 Activity通过LayoutInflater解析出XmlLayout相关信息LayoutInflater内部维护了一个InflaterFactory对象InflaterFactory接口包含了一个onCreateView方法&#xff0c;用于创建View将解析出的Xml信息转为AttributeSet&#xff0c;交给Inflate…

安全测试之使用Docker搭建SQL注入安全测试平台sqli-labs

1 搜索镜像 docker search sqli-labs 2 拉取镜像 docker pull acgpiano/sqli-labs 3 创建docker容器 docker run -d --name sqli-labs -p 10012:80 acgpiano/sqli-labs 4 访问测试平台网站 若直接使用虚拟机&#xff0c;则直接通过ip端口号访问若通过配置域名&#xff0…

PyQt多线程详解

PyQt多线程是在PyQt框架中利用多线程技术来提高应用程序的响应性和性能的一种方法。下面将详细说明PyQt多线程的基本概念、应用场景以及实现方式。 一、PyQt多线程的基本概念 在PyQt中&#xff0c;多线程指的是在单个程序实例内同时运行多个线程。每个线程都可以执行不同的任…

第十五章 Nest Pipe(内置及自定义)

NestJS的Pipe是一个用于数据转换和验证的特殊装饰器。Pipe可以应用于控制器&#xff08;Controller&#xff09;的处理方法&#xff08;Handler&#xff09;和中间件&#xff08;Middleware&#xff09;&#xff0c;用于处理传入的数据。它可以用来转换和验证数据&#xff0c;确…

【Linux进阶】文件系统5——ext2文件系统(inode)

1.再谈inode (1) 理解inode&#xff0c;要从文件储存说起。 文件储存在硬盘上&#xff0c;硬盘的最小存储单位叫做"扇区"&#xff08;Sector&#xff09;。每个扇区储存512字节&#xff08;相当于0.5KB&#xff09;。操作系统读取硬盘的时候&#xff0c;不会一个个…