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

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


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

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

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值