std::set_intersection用于计算两个有序序列的交集,需包含头文件,要求输入序列已排序,可应用于vector等容器,使用时需确保输出容器有足够空间或用std::back_inserter动态插入,支持自定义比较函数,时间复杂度O(m+n)。

在C++中,std::set_intersection 是一个非常实用的算法函数,用于计算两个有序序列的交集,并将结果输出到另一个容器中。它定义在 gorithm> 头文件中,适用于任何支持随机访问迭代器的容器,比如 std::vector、std::array 或原生数组,而不仅限于 std::set。
std::set_intersection 要求输入的两个序列都已按相同规则排序(默认升序),否则结果未定义。由于 std::set 本身是有序结构,因此天然满足条件;但若使用 vector 等容器,则需提前调用 std::sort 排序。
基本语法如下:
template<class InputIt1, class InputIt2, class OutputIt>
OutputIt set_intersection(InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2,
OutputIt d_first);
函数返回值是指向输出范围末尾的迭代器。
以下是一个使用 vector 求交集的典型例子:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main() {
std::vector<int> a = {1, 2, 3, 4, 5};
std::vector<int> b = {3, 4, 5, 6, 7};
// 确保有序(这里已经有序)
std::vector<int> result;
result.resize(std::min(a.size(), b.size())); // 预分配空间
auto it = std::set_intersection(
a.begin(), a.end(),
b.begin(), b.end(),
result.begin()
);
result.erase(it, result.end()); // 删除未使用的部分
// 输出结果
for (int x : result) {
std::cout << x << " ";
}
// 输出: 3 4 5
}
注意:输出容器必须预先分配足够空间,否则会导致未定义行为。常用方法是调用 resize(),或使用 std::back_inserter 避免手动管理大小。
如果不想预分配空间,可以结合 <iterator></iterator> 中的 std::back_inserter:
万彩商图
专为电商打造的AI商拍工具,快速生成多样化的高质量商品图和模特图,助力商家节省成本,解决素材生产难、产图速度慢、场地设备拍摄等问题。
212
查看详情
std::vector<int> result;
std::set_intersection(
a.begin(), a.end(),
b.begin(), b.end(),
std::back_inserter(result)
);
这样每次插入都会自动调用 push_back,更安全灵活。
如果数据类型不支持默认小于比较,或需要降序处理,可传入自定义比较函数:
std::set_intersection(
a.begin(), a.end(),
b.begin(), b.end(),
result.begin(),
std::greater<int>{} // 用于降序排列的数据
);
此时两个输入序列必须按 greater 规则排序。
对于自定义类型,例如:
struct Person {
int id;
std::string name;
};
// 自定义比较:按 id 升序
auto cmp = [](const Person& a, const Person& b) {
return a.id < b.id;
};
std::set_intersection(v1.begin(), v1.end(),
v2.begin(), v2.end(),
std::back_inserter(result),
cmp);
基本上就这些。只要保证数据有序、输出容器可写、比较逻辑一致,std::set_intersection 就能高效求出交集,时间复杂度为 O(m + n),适合处理大量数据的集合操作。
以上就是C++如何使用std::set_intersection求集合交集_C++集合操作与std::set_intersection应用的详细内容,更多请关注其它相关文章!
# ai
# c++
# ios
# stream
# 排列
# 自定义
# go
# 如何实现
# seo名称是什么
# 大城网站建设要求
# 浴霸推广营销方案怎么写
# seo优化内容和质量
# 岳阳网站建设工作避雷
# 多路
# 管理机制
# 何为
# 尼克
# 求出
# 如何使用
# 升序
# 都是
# 医药化工中间体网站建设
# 南京抖音seo找谁好做
# 福州企业营销推广
# 全国营销推广哪家好做些
# 徐州seo基础
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
抖音号已注销怎么解绑企业认证?不解绑企业认证会怎样?
全球各国上班时间表外贸邮件时间
管理打开的编辑器:固定、分组和关闭技巧
QQ邮箱注册地址 免费获取QQ邮箱账号
mysql如何限制远程访问_mysql远程访问限制方法
Python高效统计字典嵌套列表值在目标列表中的出现次数
PHP 4 函数中引用参数的默认值限制与解决方案
如何在CSS中使用absolute实现登录弹窗居中_transform translate结合
快手网页版官方访问 快手网页版页面在线打开
金牛福袋获取攻略
《幻兽帕鲁》手游帕鲁捕捉技巧分享
告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名
折叠屏手机充不进电是什么问题? 特殊结构带来的维修难点
解决CSS布局中意外顶部空白问题的教程
AI图层蒙版怎么用_AI图层蒙版应用技巧与设计实例
聚水潭ERP后台管理系统登录 聚水潭ERP官方登录通道
火柴人战争网页版在线玩
如何在CSS中设置背景图像:一个全面指南
RxJS中如何高效地在一个函数内处理和合并多个数据集合
Python定时发送QQ消息
Win10锁屏时间怎么设置 Win10调整自动锁屏时间方法
search中maxlength属性用法解析
139邮箱登录入口官网 139邮箱登录入口官网网址
哈尔滨城市通昵称修改方法
《东方航空》添加乘机人方法
《崩坏:星穹铁道》3.6版本异相仲裁打法及配队推荐
Word 2003字体大小设置方法
解决C#跨线程访问XML对象的异常 安全的并发XML处理模式
实时数据流中高效查找最小值与最大值
Git命令与VS Code UI操作的对应关系解析
J*aScript对象中深度嵌套URL键的查找与更新策略
edge浏览器怎么修改语言为中文_Edge界面语言切换教程
《火影忍者:木叶高手》快速升级攻略
PHP实现等比数列:构建数组元素基于前一个值递增的方法
解决CSS容器溢出问题:使用calc()实现精确布局与边距控制
《sketchbook》选中部分图案移动方法
有道AI翻译入口 智能写作官方网站入口
sublime如何撤销关闭的标签页_sublime重新打开已关闭文件技巧
Win10输入法不见了怎么办 Win10找回语言栏图标教程
C++ virtual析构函数作用_C++基类虚析构函数防止内存泄漏
Linux如何自动分析系统异常日志_Linux日志智能检测
顺丰快递收费标准查询_如何查看顺丰最新收费价格
Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改
微星主板BIOS怎么调整内存时序_内存参数手动优化BIOS设置教程
Go语言反射机制下访问嵌入结构体中的被遮蔽方法
以下哪一项是古代兵书三十六计中的计谋
MySQL多重关联查询:利用别名高效获取同一表的多个关联字段
Excel宏怎么删除_Excel中删除宏的详细操作流程
4399造梦西游3无敌版_4399游戏入口
oppo手机如何通过下拉通知栏截图_oppo手机通知栏快捷截图方法
2025-11-23
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。