C++ 常见集合算法

news2024/11/20 14:31:10

目录

🤔常见集合算法:

🙂1.set_intersection  容器交集

代码示例:

运行结果:

🙂2.set_union  容器并集

图解:

代码示例:

运行结果:

🙂 3.set_difference    容器差集

图解:

代码示例:

运行结果:

结束!


🤔常见集合算法:

🙂1.set_intersection  容器交集

 

set_intersection是STL中的一个算法函数,用于求两个已经有序的集合的交集,并将结果输出到一个目标容器中。set_intersection函数的声明方式如下:

template<class InputIt1, class InputIt2, class OutputIt>
OutputIt set_intersection(InputIt1 first1, InputIt1 last1,
                           InputIt2 first2, InputIt2 last2,
                           OutputIt d_first);
  • first1 和 last1:表示第一个有序集合的起始和结束迭代器
  • first2 和 last2:表示第二个有序集合的起始和结束迭代器
  • d_first:表示输出结果的容器的起始迭代器

📖函数返回值为输出结果容器的结束迭代器。

set_intersection函数会将两个集合的交集元素依据元素的大小关系依次复制到目标容器中,并返回目标容器的迭代器。

代码示例:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

void print(int val)
{
    cout << val << " ";
}

int main()
{
    vector<int> d1 = { 10, 20, 30, 40,};
    vector<int> d2 = {  30, 40, 50, 60 };

    vector<int> d3(100); // 向量容量设为100

    auto iter = set_intersection(d1.begin(), d1.end(), d2.begin(), d2.end(), d3.begin());

    cout << "d1:  ";
    for_each(d1.begin(), d1.end(), print);
    cout << endl;

    cout << "d2:  ";
    for_each(d2.begin(), d2.end(), print);
    cout << endl;

    cout << "两个容器的交集为:";
    for_each(d3.begin(), iter, print); // 只输出交集部分
    cout << endl;

    return 0;
}

运行结果:

🙂2.set_union  容器并集

图解:

 

set_union是STL中的一个算法函数,用于求两个已经有序的集合的并集,并将结果输出到一个目标容器中。set_union函数的声明方式如下:

template<class InputIt1, class InputIt2, class OutputIt>
OutputIt set_union(InputIt1 first1, InputIt1 last1,
                   InputIt2 first2, InputIt2 last2,
                   OutputIt d_first);
  • first1 和 last1:表示第一个有序集合的起始和结束迭代器
  • first2 和 last2:表示第二个有序集合的起始和结束迭代器
  • d_first:表示输出结果的容器的起始迭代器

📖函数返回值为输出结果容器的结束迭代器。

set_union函数会将两个集合的所有元素依据元素的大小关系依次复制到目标容器中,并排除重复的元素,返回目标容器的迭代器。

代码示例:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

void print(int val)
{
    cout << val << " ";
}

int main()
{
    vector<int> d1 = { 10, 20, 30, 40,};
    vector<int> d2 = {  10,30, 40, 50, 60 };

    vector<int> d3(100); // 向量容量设为100

    auto iter = set_union(d1.begin(), d1.end(), d2.begin(), d2.end(), d3.begin());

    cout << "d1:  ";
    for_each(d1.begin(), d1.end(), print);
    cout << endl;

    cout << "d2:  ";
    for_each(d2.begin(), d2.end(), print);
    cout << endl;

    cout << "两个容器的并集为:";
    for_each(d3.begin(), iter, print); // 只输出并集部分
    cout << endl;

    return 0;
}

运行结果:

🙂 3.set_difference    容器差集

在数学中,对于两个集合A和B,A与B的差集(也称为相对补集)指的是由所有属于A但不属于B的元素组成的集合,记作A-B。

例如,对于集合A={1,2,3,4,5}和集合B={4,5,6,7,8},则A与B的差集为{1,2,3}。

                B与A的差集所有属于B但不属于A的元素组成的集合{6,7,8},记作B-A。

在计算机科学中,集合的差集操作同样应用广泛,例如在关系型数据库设计中,可以使用集合的差集操作来实现多表之间的联接操作。在C++的STL中,set_difference是一个常见的集合算法,可用于计算两个有序容器的差集。

图解:

 set_difference是STL中的一个算法函数,用于求两个已经有序的集合的差集,并将结果输出到一个目标容器中。set_difference函数的声明方式如下:

template<class InputIt1, class InputIt2, class OutputIt>
OutputIt set_difference(InputIt1 first1, InputIt1 last1,
                         InputIt2 first2, InputIt2 last2,
                         OutputIt d_first);

 

参数说明:

  • first1 和 last1:表示第一个有序集合的起始和结束迭代器
  • first2 和 last2:表示第二个有序集合的起始和结束迭代器
  • d_first:表示输出结果的容器的起始迭代器

📖函数返回值为输出结果容器的结束迭代器。

set_difference函数会将属于第一个集合但不属于第二个集合的所有元素依据元素的大小关系依次复制到目标容器中,返回目标容器的迭代器。

代码示例:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

void print(int val)
{
    cout << val << " ";
}

int main()
{
    vector<int> d1 = { 10, 20, 30, 40, };
    vector<int> d2 = { 10,30, 40, 50, 60 };

    vector<int> d3(100); // 向量容量设为100

    auto iter = set_difference(d1.begin(), d1.end(), d2.begin(), d2.end(), d3.begin());

    cout << "d1:  ";
    for_each(d1.begin(), d1.end(), print);
    cout << endl;

    cout << "d2:  ";
    for_each(d2.begin(), d2.end(), print);
    cout << endl;

    cout << "两个容器的差集为:";
    for_each(d3.begin(), iter, print); // 只输出差集部分
    cout << endl;

    return 0;
}

运行结果:

 

结束!

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

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

相关文章

高速缓存(cache)的原理: 了解计算机架构与性能优化

计基之存储器层次结构 Author&#xff1a; Once Day Date&#xff1a; 2023年5月9日 长路漫漫&#xff0c;而今才刚刚启程&#xff01; 本内容收集整理于《深入理解计算机系统》一书。 参看文档: 捋一捋Cache - 知乎 (zhihu.com)iCache和dCache一致性 - 知乎 (zhihu.com)C…

【SpringCloud——Elasticsearch(上)】

一、什么是Elasticsearch elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。 二、倒排索引 1、正向索引 2、倒排索引 3、总结 三、ES和MySQL的区别 四、操作索引库 1、基于Kibana&#xff08;WEB界面&#xff09; 以下操作…

jvisualvm ssl远程连接JVM

jvisualvm 远程ssl连接 一、没认证的 JMX连接 (不安全) 这种方式&#xff0c;仅限于测试环境&#xff0c;可以这样操作。生产环境为了安全起见&#xff0c;还是要使用带认证的方式连接。 远程jar包服务 启动时 java -jar [jvm参数] xx.jar添加JVM参数 java -jar -Xmx512M -Xms2…

基于深度学习的高精度汽车自行车检测识别系统(PyTorch+Pyside6+模型)

摘要&#xff1a;基于深度学习的高精度汽车自行车检测识别系统可用于日常生活中检测与定位汽车自行车目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的汽车自行车目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目…

基于深度学习的高精度野生动物检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度野生动物检测&#xff08;水牛、犀牛、斑马和大象&#xff09;识别系统可用于日常生活中或野外来检测与定位野生动物目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的野生动物目标检测识别&#xff0c;另外支持结果可视…

Flutter问题记录 - TextField组件多行提示文本显示不全

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 梳理Flutter项目的过程中发现还有一些遗留的TODO没处理&#xff0c;其中有一个和TextField组件相关。 开发环境 Flutter: 3.10.1Dart: 3.0.1 问题描述 TextField组件设置maxLines: null不限制行数&#xff0c;同时…

【文章学习系列之模型】SCALEFORMER

本章内容 文章概况模型结构主要方法多尺度框架跨尺度标准化模型输入编码损失函数 实验结果消融实验跨尺度标准化自适应损失函数 总结 文章概况 《SCALEFORMER: ITERATIVE MULTI-SCALE REFINING TRANSFORMERS FOR TIME SERIES FORECASTING》是2023年发表于ICLR上的一篇论文。作…

硬件工程师-BUCK开关电源设计

一、电感的伏安特性 电感线圈通电之后&#xff0c;会产生磁场&#xff0c;磁场是有一定极性的&#xff0c;而且磁场分布&#xff0c;是一个封闭的回路。在线圈的内部磁力线是比较密集的&#xff0c;磁场的强度是比较强的&#xff0c;外面空气中的的这个磁力线是比较稀疏的&…

【Unity3D】调整屏幕亮度、饱和度、对比度

1 屏幕后处理流程 调整屏幕亮度、饱和度、对比度&#xff0c;需要使用到屏幕后处理技术。因此&#xff0c;本文将先介绍屏幕后处理流程&#xff0c;再介绍调整屏幕亮度、饱和度、对比度的实现。 屏幕后处理即&#xff1a;渲染完所有对象后&#xff0c;得到一张屏幕图像&#xf…

Centos6.5环境Nginx 1.16.1升级到1.24.0版本

一、背景 2023年4月11日&#xff0c;官方发布了Nginx最新稳定版&#xff0c;版本号为 1.24.0。该版本是基于1.23.x&#xff08;1.23.0 - 1.23.4&#xff09;开发版的Bug修复&#xff0c;以及一些新特性的加入&#xff0c;而形成的稳定版。安全部门扫描后&#xff0c;发现现场不…

车载ECU休眠唤醒-TJA1145

前言 首先&#xff0c;请教大家几个小小问题&#xff0c;你清楚&#xff1a; 什么是TJA1145吗&#xff1f;你知道休眠唤醒控制基本逻辑是怎么样的吗&#xff1f;TJA1145又是如何控制ECU进行休眠唤醒的呢&#xff1f;使用TJA1145时有哪些注意事项呢&#xff1f; 今天&#xff…

chatgpt赋能python:Python中如何输入中文——从安装到常见问题解决

Python中如何输入中文——从安装到常见问题解决 Python是一门广泛使用的编程语言&#xff0c;其优秀的开源性、易用性、灵活性以及庞大的生态圈也令越来越多的人选择Python。但是对于初学者来说&#xff0c;如何正确输入中文常常成为一个问题。本篇文章从安装、常见问题解决、…

LeetCode 560 和为 K 的子数组

LeetCode 560 和为 K 的子数组 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/subarray-sum-equals-k/description 博主Github&#xff1a;https://github.com/GDUT-Rp/LeetCode 题目&#xff1a; 给你一个整数数组 …

ChatGPT的4个不为人知却非常实用的小功能

今天重点介绍四个ChatGPT很实用的小功能。 一、停止生成 如果在ChatGPT输出内容的过程中&#xff0c;我们发现结果不是自己想要的&#xff0c;可以直接点击“Stop generating”按钮&#xff0c;这样它就会立即停止输出。 二、复制功能 在ChatGPT返回对话的右侧&#xff0c;有三…

在vue中集成高德地图amap-jsapi-loader

前往高德地图开发平台高德开放平台 | 高德地图API 一&#xff1a;申请高德key 去高德官网去创建一个属于自己的地图应用 &#xff08;得到key和秘钥&#xff09; 。 首先&#xff0c;我们要注册一个开发者账号&#xff0c;根据实际情况填写&#xff0c;身份写个人&#xff1a;…

制作嵌入式busybox rootfs系统

1、busybox下载 BusyBox 此篇使用版本BusyBox 1.31.1 (stable) 2、设置交叉编译环境变量 source environment-setup-aarch64-poky-linux或者其他架构的编译链工具 3、busybox编译设置 cd busybox-1.31.1 修改根目录Makefile中的CROSS_COMPILE和ARCH参数 比如ARCH ? ar…

Flask-RESTful的使用

Flask-RESTful的使用 Flask-RESTful基本使用安装定义资源Resources创建API实例添加资源到API运行Flask应用 请求处理请求解析参数校验 响应处理数据序列化定制返回格式 其他功能蓝图装饰器集合路由命名规范路由名称 Flask-RESTful Flask-RESTful是一个用于构建RESTful API的扩展…

中台分类

大家好&#xff0c;我是易安&#xff0c;之前我们谈到过中台的概念&#xff0c;以及如何落地中台。今天我就带你一起看一看&#xff0c;行业常见的中台分类。 业务中台与数据中台 业务中台 业务这个词&#xff0c;其实是有些宽泛的&#xff0c;我听到很多人口中说的业务都不是…

RK3588平台开发系列讲解(驱动基础篇)设备树常用 of 函数

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、查找节点的 of 函数二、获取属性值的 of 函数三、实验示例3.1、查找的节点代码3.2、获取属性内容代码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 设备树描述了设备的详细信息,这些信息包括数字类型的…

Web安全神器-Burpsuite社区版/专业版下载、安装及使用教程

一、Burpsuite下载 Burp Suite是进行Web应用安全测试的一个集成平台&#xff0c;无缝融合各种安全工具并提供全面的接口适配&#xff0c;支持完整的Web应用测试流程&#xff0c;从最初的映射和应用程序的攻击面分析到发现和利用安全漏洞等领域均适用&#xff0c;同时还可以做抓…