当前位置: 首页 > news >正文

C++ STL常用算法之常用集合算法

常用集合算法

学习目标:

  • 掌握常用的集合算法

算法简介:

  • set_intersection // 求两个容器的交集

  • set_union // 求两个容器的并集

  • set_difference // 求两个容器的差集

set_intersection

功能描述:

  • 求两个容器的交集

函数原型:

  • set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);

    • beg1:容器1开始迭代器

    • end1:容器1结束迭代器

    • beg2:容器2开始迭代器

    • end2:容器2结束迭代器

    • dest:目标容器开始迭代器

    • 注意:两个集合必须是有序序列,求交集的两个集合必须的有序序列

    • set_intersection返回值既是交集中最后一个元素的位置

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

int main() {
    // 创建两个有序的 vector 容器
    vector<int> v1 = {1, 2, 3, 4, 5};
    vector<int> v2 = {4, 5, 6, 7, 8};

    // 输出原始容器的内容
    cout << "v1: ";
    copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " "));
    cout << endl;

    cout << "v2: ";
    copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, " "));
    cout << endl;

    // 创建一个目标容器来存储交集
    vector<int> v_intersection;

    // 使用 set_intersection 函数计算交集
    set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(v_intersection));

    // 输出交集的内容
    cout << "交集: ";
    copy(v_intersection.begin(), v_intersection.end(), ostream_iterator<int>(cout, " "));
    cout << endl;

    return 0;
}

 

set_union

功能描述:

  • 求两个集合的并集

函数原型:

  • set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);

    • beg1:容器1开始迭代器

    • end1:容器1结束迭代器

    • beg2:容器2开始迭代器

    • end2:容器2结束迭代器

    • dest:目标容器开始迭代器

    • 注意:两个集合必须是有序序列,求并集的两个集合必须的有序序列

    • 目标容器开辟空间需要两个容器相加

    • set_union返回值既是并集中最后一个元素的位置

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

int main() {
    // 创建两个有序的 vector 容器
    vector<int> v1 = {1, 2, 3, 4, 5};
    vector<int> v2 = {4, 5, 6, 7, 8};

    // 输出原始容器的内容
    cout << "v1: ";
    copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " "));
    cout << endl;

    cout << "v2: ";
    copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, " "));
    cout << endl;

    // 创建一个目标容器来存储并集
    vector<int> v_union;

    // 使用 set_union 函数计算并集
    set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(v_union));

    // 输出并集的内容
    cout << "并集: ";
    copy(v_union.begin(), v_union.end(), ostream_iterator<int>(cout, " "));
    cout << endl;

    return 0;
}

 

set_difference

功能描述:

  • 求两个集合的差集

函数原型:

  • set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);

    • beg1:容器1开始迭代器

    • end1:容器1结束迭代器

    • beg2:容器2开始迭代器

    • end2:容器2结束迭代器

    • dest:目标容器开始迭代器

    • 注意:两个集合必须是有序序列,求差集的两个集合必须的有序序列

    • 目标容器开辟空间需要从两个容器取较大值

    • set_difference返回值既是差集中最后一个元素的位置

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

int main() {
    // 创建两个有序的 vector 容器
    vector<int> v1 = {1, 2, 3, 4, 5};
    vector<int> v2 = {4, 5, 6, 7, 8};

    // 输出原始容器的内容
    cout << "v1: ";
    copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " "));
    cout << endl;

    cout << "v2: ";
    copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, " "));
    cout << endl;

    // 创建一个目标容器来存储差集
    vector<int> v_difference;

    // 使用 set_difference 函数计算差集 (v1 - v2)
    set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(v_difference));

    // 输出差集的内容
    cout << "差集 (v1 - v2): ";
    copy(v_difference.begin(), v_difference.end(), ostream_iterator<int>(cout, " "));
    cout << endl;

    return 0;
}

相关文章:

  • 从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.3.2参数高效微调:LoRA与适配器(Adapter)技术
  • 子网划分浅度解析
  • Kotlin基础知识学习(五)
  • Set,Map,WakeSet,WakeMap
  • 虚拟pinctrl驱动
  • ZGC初步了解
  • 【小技巧】如何查看容器的启动参数
  • Java 大视界 -- Java 大数据在智能电网电力市场交易数据分析与策略制定中的关键作用(162)
  • C++中的搜索算法实现
  • Chapters 15 16:What Is Architecture?Independence_《clean architecture》notes
  • 百人会上的蔚小理与「来的刚刚好」的雷军
  • 关于参加CSP-J/S认证需符合年龄条件的公告(2025年起)
  • Python PDF解析利器:pdfplumber | AI应用开发
  • 【什么是机器学习——多项式逼近】
  • 多线程 - 线程安全 2 -- > 死锁问题
  • snort检测端口扫描工具
  • AI基础03-视频数据采集
  • SpringBoot 概述
  • Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型多变量回归预测
  • 算力100问☞第98问:算力鸿沟会加剧数字不平等吗?