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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值