C++ STL 求并集、交集、差集

求并集 :std::set_union

将两个set的并集放入vector中。

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int main()
{
    set<int> a;
    set<int> b;
    a.insert(1);
    a.insert(3);
    a.insert(5);
    a.insert(4);
    a.insert(9);
    a.insert(6);

    b.insert(5);
    b.insert(6);
    b.insert(7);

    vector<int> result;
    set_union(a.begin(),a.end(),b.begin(),b.end(),inserter(result,result.begin()));
    for(int i=0;i<result.size();i++)
    {
        cout<<result[i]<<" ";
    }
    return 0;
}

运行结果

1 3 4 5 6 7 9

注意: set具有有序性,即对插入的元素会进行自动排序,而如果需要对vector进行求并集、交集、差集操作,请提前使用sort函数进行排序。

求交集 :set_intersection

两个vector求交集,并将结果保留到vector中。
这次我们插入的数据已是有序,所以不需要再排序。

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int main()
{
    vector<int> a;
    vector<int> b;
    a.push_back(1);
    a.push_back(3);
    a.push_back(5);
    a.push_back(6);
    a.push_back(7);
    a.push_back(10);

    b.push_back(5);
    b.push_back(6);
    b.push_back(7);

    vector<int> result;
    set_intersection(a.begin(),a.end(),b.begin(),b.end(),inserter(result,result.begin()));

    for(int i=0;i<result.size();i++)
    {
        cout<<result[i]<<" ";
    }
    return 0;
}

运行结果:

5 6 7

求差集 :set_difference

将两个vector求差集,放入新的vector中。

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
    vector<int> a;
    vector<int> b;
    a.push_back(1);
    a.push_back(3);
    a.push_back(5);
    a.push_back(6);
    a.push_back(7);
    a.push_back(10);

    b.push_back(5);
    b.push_back(6);
    b.push_back(7);

    vector<int> result;
    set_difference(a.begin(),a.end(),b.begin(),b.end(),inserter(result,result.begin()));

    for(int i=0;i<result.size();i++)
    {
        cout<<result[i]<<" ";
    }
    return 0;
}

运行结果:

1 3 10

拾遗

需要注意的是,这三个函数并不会帮我们完成去重操作,如果需要去重,请使用unique函数。

以求交集为例,vector中存在相同元素。

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int main()
{
    vector<int> a;
    vector<int> b;
    a.push_back(1);
    a.push_back(3);
    a.push_back(5);
    a.push_back(5);
    a.push_back(7);
    a.push_back(10);

    b.push_back(5);
    b.push_back(5);
    b.push_back(7);

    vector<int> result;
    set_intersection(a.begin(),a.end(),b.begin(),b.end(),inserter(result,result.begin()));

    for(int i=0;i<result.size();i++)
    {
        cout<<result[i]<<" ";
    }
    return 0;
}

运行结果

5 5 7

如果想要的是不相等的,可通过譬如

扫描二维码关注公众号,回复: 8899475 查看本文章
result.erase(unique(result.begin(),result.end()), result.end());

来解决。

发布了202 篇原创文章 · 获赞 100 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_43889841/article/details/104098269