set_intersection():存放交集的容器的容量必须要足够大到能放下所有的元素,即函数只执行复制,不是插入!
set_union():并集
set_difference():差集
但是模板 insert_iterator<>可以将复制转换为插入,可以解决该问题。
通用函数,而不是set的专有函数。
#include<bits/stdc++.h>
using namespace std;
class A
{
private:
string id;
string name;
public:
A(string id,string name)
{
this->id=id;
this->name=name;
}
string getId()
{
return id;
}
string getName()
{
return name;
}
int operator <(A &a)
{
return id<a.id;
}
friend ostream & operator<<(ostream &ost,A &obj)
{
ost<<obj.getId()<<" "<<obj.getName()<<endl;
return ost;
}
};
int main()
{
vector<A>v1;
vector<A>v2;
A a1("541","算法");A a2("4684","阿萨");A a3("655","奥维斯");
A a4("4485","路由");
A a5("655","奥维斯");A a6("4485","路由");A a7("32985","天润园");
v1.push_back(a1);v1.push_back(a2);v1.push_back(a3);v1.push_back(a4);
v2.push_back(a5);v2.push_back(a6);v2.push_back(a7);
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
vector<A> v_intersection;
vector<A> v_union;
vector<A> v_difference;
set_intersection(v1.begin(), v1.end(),v2.begin(), v2.end(),insert_iterator<vector<A> >(v_intersection,v_intersection.begin()));
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),insert_iterator<vector<A> >(v_union,v_union.begin()));
set_difference(v1.begin(),v1.end(),v2.begin(),v2.end(),insert_iterator<vector<A> >(v_difference,v_difference.begin()));
for(int i=0;i<v_intersection.size();i++)
cout<<v_intersection[i];
cout<<endl;
for(int i=0;i<v_union.size();i++)
cout<<v_union[i];
cout<<endl;
for(int i=0;i<v_difference.size();i++)
cout<<v_difference[i];
}