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.mfbz.cn/a/779826.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT4深度解析:探索智能对话新境界

大模型chatgpt4分析功能初探 目录 1、探测目的 2、目标变量分析 3、特征缺失率处理 4、特征描述性分析 5、异常值分析 6、相关性分析 7、高阶特征挖掘 1、探测目的 1、分析chat4的数据分析能力&#xff0c;提高部门人效 2、给数据挖掘提供思路 3、原始数据&#xf…

Navicat终于免费了, 但是这个结果很奇葩

个人用下载地址: 点呀 好家伙, 每个机构最多5个用户, 对于正在审计的公司…

DAY1: 实习前期准备

文章目录 VS Code安装的插件C/CCMakeGitHub CopilotRemote-SSH收获 VS Code 下载链接&#xff1a;https://code.visualstudio.com 安装的插件 C/C 是什么&#xff1a;C/C IntelliSense, debugging, and code browsing. 为什么&#xff1a;初步了解如何在VS Code里使用C输出…

Vulnhub-Os-hackNos-1(包含靶机获取不了IP地址)

https://download.vulnhub.com/hacknos/Os-hackNos-1.ova #靶机下载地址 题目&#xff1a;要找到两个flag user.txt root.txt 文件打开 改为NAT vuln-hub-OS-HACKNOS-1靶机检测不到IP地址 重启靶机 按住shift 按下键盘字母"E"键 将图中ro修改成…

筛选Github上的一些优质项目

每个项目旁都有标签说明其特点&#xff0c;如今日热捧、多模态、收入生成、机器人、大型语言模型等。 项目涵盖了不同的编程语言和领域&#xff0c;包括人工智能、语言模型、网页数据采集、聊天机器人、语音合成、AI 代理工具集、语音转录、大型语言模型、DevOps、本地文件共享…

7-6 每日升学消息汇总

复旦附中清北比例大涨&#xff0c;从统计数据来看&#xff0c;今年复附的清北人数将创历史新高&#xff0c;达到前所未有年进43人。离上海7月9号中考出分&#xff0c;还有3天。小道消息说&#xff0c;画狮的数游天下又回来了&#xff0c;目前还未官方消息。2024第二届国际数学夏…

安卓虚拟位置修改1.25beta支持路线模拟、直接定位修改

导语:更新支持安卓14/15&#xff0c;支持路线模拟、直接定位修改&#xff0c;仅支持单一版本 无root需根据教程搭配下方链接所提供的虚拟机便可进行使用 有root且具备XP环境可直接真机运行 如你有特殊需求 重启问题设置打开XP兼容 针对具有虚拟机检测的软件 建议如下 度娘搜索…

多表查询sql

概述&#xff1a;项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系&#xff0c;分为三种&#xff1a; 一对多多对多一对一 一、多表关系 一对多 案例&#xff1a;部门与…

在CMD中创建虚拟环境并在VSCode中使用和管理

1. 使用Conda创建虚拟环境 在CMD或Anaconda Prompt中执行以下代码以创建一个新的虚拟环境&#xff1a; conda create -n my_env python 3.8 这样会创建一个名为 my_env 的环境&#xff0c;并在Anaconda环境目录下生成一个相应的文件夹&#xff0c;包含该虚拟环境所需的所有…

STM32-ADC+DMA

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. ADC模拟-数字转换器1.1 ADC模拟-数字转换器1.2 逐次逼近型ADC1.3 ADC框图1.4 ADC基本结构1.5 输入通道1.6 规则组的转换模式1.6.1 单次转换&#xff0c;非扫描模式1.6.2 连续转换&#xff0c;非扫描模式1.6.3 单次…

时间、查找、打包、行过滤与指令的运行——linux指令学习(二)

前言&#xff1a;本节内容标题虽然为指令&#xff0c;但是并不只是讲指令&#xff0c; 更多的是和指令相关的一些原理性的东西。 如果友友只想要查一查某个指令的用法&#xff0c; 很抱歉&#xff0c; 本节不是那种带有字典性质的文章。但是如果友友是想要来学习的&#xff0c;…

如何确保 PostgreSQL 在高并发写操作场景下的数据完整性?

文章目录 一、理解数据完整性二、高并发写操作带来的挑战三、解决方案&#xff08;一&#xff09;使用合适的事务隔离级别&#xff08;二&#xff09;使用合适的锁机制&#xff08;三&#xff09;处理死锁&#xff08;四&#xff09;使用索引和约束&#xff08;五&#xff09;批…

系统学习ElastricSearch(一)

不知道大家在项目中是否使用过ElastricSearch&#xff1f;大家对它的了解又有多少呢&#xff1f;官网的定义&#xff1a;Elasticsearch是一个分布式、可扩展、近实时的搜索与数据分析引擎。今天我们就来揭开一下它的神秘面纱&#xff08;以下简称ES&#xff09;。 ES 是使用 J…

uniapp零基础入门Vue3组合式API语法版本开发咸虾米壁纸项目实战

嗨&#xff0c;大家好&#xff0c;我是爱搞知识的咸虾米。 今天给大家带来的是零基础入门uniapp&#xff0c;课程采用的是最新的Vue3组合式API版本&#xff0c;22年发布的uniappVue2版本获得了官方推荐&#xff0c;有很多同学等着我这个vue3版本的那&#xff0c;如果没有学过vu…

CH12_函数和事件

第12章&#xff1a;Javascript的函数和事件 本章目标 函数的概念掌握常用的系统函数掌握类型转换掌握Javascript的常用事件 课程回顾 Javascript中的循环有那些&#xff1f;Javascript中的各个循环特点是什么&#xff1f;Javascript中的各个循环语法分别是什么&#xff1f;…

网页封装APP:让您的网站变身移动应用

网页封装APP&#xff1a;让您的网站变身移动应用 随着移动设备的普及&#xff0c;越来越多的人开始使用移动设备浏览网站。但是&#xff0c;传统的网站设计并不适合移动设备的屏幕尺寸和交互方式&#xff0c;这导致了用户体验不佳和流失。 有没有办法让您的网站变身移动应用&…

【ROS2】初级:客户端-编写一个简单的服务和客户端(Python)

目标&#xff1a;使用 Python 创建并运行服务节点和客户端节点。 教程级别&#xff1a;初学者 时间&#xff1a;20 分钟 目录 背景 先决条件 任务 1. 创建一个包2. 编写服务节点3. 编写客户端节点4. 构建并运行 摘要 下一步 相关内容 背景 当节点通过服务进行通信时&#xff0c…

【项目日记(一)】梦幻笔耕-数据层实现

❣博主主页: 33的博客❣ ▶️文章专栏分类:项目日记◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多项目内容 目录 1.前言2.后端模块3数据库设计4.mapper实现4.1UserInfoMapper4.2BlogMapper 5.总结 1.…

机器学习筑基篇,​Ubuntu 24.04 快速安装 PyCharm IDE 工具,无需激活!

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] Ubuntu 24.04 快速安装 PyCharm IDE 工具 描述&#xff1a;虽然在之前我们安装了VScode&#xff0c;但是其对于使用Python来写大型项目以及各类配置还是比较复杂的&#xff0c;所以这里我们还是推…

U盘非安全拔出后的格式化危机与数据拯救策略

在数字化时代&#xff0c;U盘作为便捷的数据携带工具&#xff0c;其重要性不言而喻。然而&#xff0c;许多用户在日常使用中往往忽视了安全退出的重要性&#xff0c;直接拔出U盘后再插入时可能会遭遇“需要格式化”的提示&#xff0c;这一状况不仅令人措手不及&#xff0c;更可…