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 排序。
基本语法如下:
templateOutputIt set_intersection(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt d_first);
函数返回值是指向输出范围末尾的迭代器。
以下是一个使用 vector 求交集的典型例子:
#include#include #include #include int main() { std::vector a = {1, 2, 3, 4, 5}; std::vector b = {3, 4, 5, 6, 7}; // 确保有序(这里已经有序) std::vector 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 避免手动管理大小。
如果不想预分配空间,可以结合 中的 std::back_inserter:
std::vectorresult; 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{} // 用于降序排列的数据
);
此时两个输入序列必须按 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),适合处理大量数据的集合操作。
# go
# ai
# c++
# ios
# stream
# 排列
# 数据类型
# Array
# sort
# 算法
# 自定义
# 升序
# 求出
# 是一个
# 头文件
# 迭代
# 降序
# 就能
# 适用于
# 并将
相关文章:
如何高效利用亚马逊云主机搭建企业网站?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
如何通过虚拟主机快速完成网站搭建?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
建站之星如何实现网站加密操作?
如何将凡科建站内容保存为本地文件?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
常州企业建站如何选择最佳模板?
建站主机默认首页配置指南:核心功能与访问路径优化
如何通过西部建站助手安装IIS服务器?
北京网站制作的公司有哪些,北京白云观官方网站?
网站按钮制作软件,如何实现网页中按钮的自动点击?
如何高效配置IIS服务器搭建网站?
建站ABC备案流程中有哪些关键注意事项?
建站之星展会模版如何一键下载生成?
电商网站制作公司有哪些,1688网是什么意思?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
购物网站制作公司有哪些,哪个购物网站比较好?
建站之星伪静态规则如何正确配置?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
简历在线制作网站免费,免费下载个人简历的网站是哪些?
如何在万网主机上快速搭建网站?
建站之星如何快速更换网站模板?
宁波自助建站系统如何快速打造专业企业网站?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
建站之星与建站宝盒如何选择最佳方案?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
h5在线制作网站电脑版下载,h5网页制作软件?
如何解决ASP生成WAP建站中文乱码问题?
如何在IIS中新建站点并配置端口与IP地址?
c++ stringstream用法详解_c++字符串与数字转换利器
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
如何安全更换建站之星模板并保留数据?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何快速搭建安全的FTP站点?
javascript中的try catch异常捕获机制用法分析
如何通过主机屋免费建站教程十分钟搭建网站?
用v-html解决Vue.js渲染中html标签不被解析的问题
如何通过.red域名打造高辨识度品牌网站?
如何快速搭建高效香港服务器网站?
历史网站制作软件,华为如何找回被删除的网站?
建站上传速度慢?如何优化加速网站加载效率?
制作表格网站有哪些,线上表格怎么弄?
,巨量百应是干嘛的?
,怎么用自己头像做动态表情包?
如何打造高效商业网站?建站目的决定转化率
宝塔Windows建站如何避免显示默认IIS页面?
Android使用GridView实现日历的简单功能
*请认真填写需求信息,我们会在24小时内与您取得联系。