C++如何使用std::set_intersection求两个集合的交集?
发布时间 - 2025-12-29 00:00:00 点击率:次std::set_intersection要求两输入范围必须升序排序,结果需写入预留空间的容器或使用插入迭代器;它不自动排序,仅归并扫描,支持自定义比较但须一致。
用 std::set_intersection 求两个集合的交集,前提是两个输入范围必须是**已排序的**(升序),且结果需写入一个目标容器(也需预留足够空间或使用插入迭代器)。
前提:确保输入已排序且使用合适容器
std::set_intersection 不会自动排序,它只做归并式扫描。所以如果你的数据来自 std::set、std::vector 或其他容器,必须满足:
- 两个输入范围(如
vec1.begin()到vec1.end())已按升序排列; - 若用
std::vector存储结果,需提前resize()或用std::back_inserter; - 若用
std::set作为结果容器,可直接用inserter,但注意它不保留插入顺序(不过本身有序)。
基本用法示例(vector + back_inserter)
这是最常用、最安全的方式:
#include #include#include #include std::vector a = {1, 2, 4, 5, 6}; std::vector b = {2, 3, 5, 7}; std::vector result; result.reserve(std::min(a.size(), b.size())); // 预分配,提升性能 std::set_intersection(a.begin(), a.end(), b.begin(), b.end(), std::back_inserter(resul t)); // result 现在是 {2, 5}
使用 set 作为输入或输出(更简洁但注意语义)
std::set 天然有序且去重,适合直接参与运算:
- 输入为
std::set:可直接传s1.begin()和s1.end(); - 输出到
std::set:用std::inserter(output_set, output_set.begin()); - 注意:
std::set_intersection不处理重复元素——它按“多集交集”规则工作(即每个元素最多出现 min(在a中频次, 在b中频次) 次),但std::set本身无重复,所以结果自然无重。
常见错误和注意事项
容易出错的地方:
- 忘记排序:对未排序的
vector直接调用,结果不可预测; - 目标容器空间不足且没用插入迭代器:导致越界写入(UB);
- 混用不同类型的迭代器(如
const_iterator和iterator)导致编译失败; - 误以为它支持自定义比较(它支持!但两个输入范围必须用**相同**的比较规则,且需显式传入第5个参数,如
std::greater)。{}
# go
# c++
# ios
# stream
# 排列
# int
# 升序
# 迭代
# 自定义
# 可直接
# 它不
# 这是
# 最多
# 或其他
# 只做
# 不同类型
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在阿里云域名上完成建站全流程?
php结合redis实现高并发下的抢购、秒杀功能的实例
Laravel如何处理异常和错误?(Handler示例)
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Mybatis 中的insertOrUpdate操作
Laravel如何使用Eloquent进行子查询
Laravel如何实现本地化和多语言支持?(i18n教程)
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
JavaScript如何实现路由_前端路由原理是什么
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
如何在服务器上三步完成建站并提升流量?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
jquery插件bootstrapValidator表单验证详解
如何在香港免费服务器上快速搭建网站?
打造顶配客厅影院,这份100寸电视推荐名单请查收
油猴 教程,油猴搜脚本为什么会网页无法显示?
香港服务器选型指南:免备案配置与高效建站方案解析
Laravel如何实现事件和监听器?(Event & Listener实战)
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
微信小程序 配置文件详细介绍
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
iOS正则表达式验证手机号、邮箱、身份证号等
微信小程序 wx.uploadFile无法上传解决办法
如何快速生成凡客建站的专业级图册?
如何用腾讯建站主机快速创建免费网站?
Laravel如何使用Service Container和依赖注入?(代码示例)
php打包exe后无法访问网络共享_共享权限设置方法【教程】
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
Android GridView 滑动条设置一直显示状态(推荐)
EditPlus中的正则表达式实战(6)
高性能网站服务器配置指南:安全稳定与高效建站核心方案
怎么用AI帮你设计一套个性化的手机App图标?
Android okhttputils现在进度显示实例代码
如何在宝塔面板创建新站点?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
敲碗10年!Mac系列传将迎来「触控与联网」双革新
详解CentOS6.5 安装 MySQL5.1.71的方法
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何快速生成高效建站系统源代码?
nginx修改上传文件大小限制的方法
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?


t));
// result 现在是 {2, 5}