STL 内置集合操作 set_union和 set_intersection 求交集和并集原来这么简单!!

动态数组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;
}

运行结果:
在这里插入图片描述

扫描二维码关注公众号,回复: 11845351 查看本文章

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

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45260385/article/details/108385987