STL 内置集合操作 set

tech2023-10-15  102

动态数组vector

需要注意: 1:求并集和交集前,需要将两个数组先进行排序(int 或者 vector都需要),否则结果有误。 2:需要定义vector的size,否则可能无法得到结果

并集 set_union( )

int main() { int a[4]={1,2,3,4}; //已经有序,若无序,需要排序! int b[4]={2,3,4,5}; vector<int> c(8); //需要定义大小 set_union(a,a+4,b,b+4,c.begin()); //并集 for(auto x:c){ cout<<x<<" "; } return 0; }

运行结果:


交集 set_intersection( )

int main() { int a[4]={1,2,3,4}; //已经有序,若无序,需要排序! int b[4]={2,3,4,5}; vector<int> c(8); //需要定义大小 set_intersection(a,a+4,b,b+4,c.begin()); //交集 for(auto x:c){ cout<<x<<" "; } return 0; }

运行结果:


如果不想要后面的0出现,以求交集为例:

int main() { int a[4]={1,2,3,4}; //已经有序,若无序,需要排序! int b[4]={2,3,4,5}; vector<int> c(8); vector<int>::iterator it=set_intersection(a,a+4,b,b+4,c.begin()); //交集 返回位置到it cout<<it-c.begin()<<endl; //交集中元素个数 for(int i=0;i<it-c.begin();i++) //输出这些元素 cout<<c[i]<<" "; return 0; }

运行结果:


集合set

集合 与 vector 不同之处在于: 1:不用排序,因为 set 本身有序且无重复 2:set_union 和 set_intersection 的第五个参数为 inserter(c,c.begin() )

并集 set_union( )

int main() { set<int> a,b,c; for(int i=1;i<5;i++) //a: 1 2 3 4 a.insert(i); for(int i=2;i<6;i++) //b: 2 3 4 5 b.insert(i); set_union(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin())); //并集 for(auto x:c){ cout<<x<<" "; } return 0; }

运行结果:


交集 set_intersection( )

int main() { set<int> a,b,c; for(int i=1;i<5;i++) //a: 1 2 3 4 a.insert(i); for(int i=2;i<6;i++) //b: 2 3 4 5 b.insert(i); set_intersection(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin())); //交集 for(auto x:c){ cout<<x<<" "; } return 0; }

运行结果:

最新回复(0)