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…

【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;实现一个情感分类模型。我们将详细介绍数据…

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;比…

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…

安全测试之使用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…

第十五章 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;不会一个个…

记录excel表生成一列按七天一个周期的方法

使用excel生成每七天一个周期的列。如下图所示&#xff1a; 针对第一列的生成办法&#xff0c;使用如下函数&#xff1a; TEXT(DATE(2024,1,1)(ROW()-2)*7,"yyyy/m/d")&" - "&TEXT(DATE(2024,1,1)(ROW()-1)*7-1,"yyyy/m/d") 特此记录。…

charles使用教程

安装与配置 下载链接&#xff1a;https://www.charlesproxy.com/download/ 进行移动端抓包&#xff1a; 电脑端配置&#xff1a; 关闭防火墙 Proxy–>勾选 macOS Proxy Proxy–>Proxy Setting–>填入代理端口8888–>勾选Enable transparent http proxying 安装c…

昇思25天学习打卡营第1天|初识MindSpore

# 打卡 day1 目录 # 打卡 day1 初识MindSpore 昇思 MindSpore 是什么&#xff1f; 昇思 MindSpore 优势|特点 昇思 MindSpore 不足 官方生态学习地址 初识MindSpore 昇思 MindSpore 是什么&#xff1f; 昇思MindSpore 是全场景深度学习架构&#xff0c;为开发者提供了全…

女生学计算机好不好?感觉计算机分有点高……?

众所周知&#xff0c;在国内的高校里&#xff0c;计算机专业的女生是非常少的&#xff0c;很多小班30人左右&#xff0c;但是每个班女生人数只有个位数。这就给很多人一个感觉&#xff0c;是不是女生天生就不适合学这个东西呢&#xff1f;女生是不是也应该放弃呢&#xff1f;当…

常见算法和Lambda

常见算法和Lambda 文章目录 常见算法和Lambda常见算法查找算法基本查找&#xff08;顺序查找&#xff09;二分查找/折半查找插值查找斐波那契查找分块查找扩展的分块查找&#xff08;无规律的数据&#xff09; 常见排序算法冒泡排序选择排序插入排序快速排序递归快速排序 Array…

SpringBoot新手快速入门系列教程二:MySql5.7.44的免安装版本下载和配置,以及简单的Mysql生存指令指南。

我们要如何选择MySql 目前主流的Mysql有5.0、8.0、9.0 主要区别 MySQL 5.0 发布年份&#xff1a;2005年特性&#xff1a; 基础事务支持存储过程、触发器、视图基础存储引擎&#xff08;如MyISAM、InnoDB&#xff09;外键支持基本的全文搜索性能和扩展性&#xff1a; 相对较…

2024年江苏省研究生数学建模竞赛B题火箭烟幕弹运用策略优化论文和代码分析

经过不懈的努力&#xff0c; 2024年江苏省研究生数学建模竞赛B题火箭烟幕弹运用策略优化论文和代码已完成&#xff0c;代码为B题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模…