求并集 :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());
来解决。