常用集合算法

头文件:#include<algorithm>.

set_intersection:求交集

set_union:求并集

set_difference:求差集

set_intersection

求交集

set_intersection(begin1(), end1(), begin2(), end2(), target.begin())

注:返回值是交集的最后一个迭代器,目标容器需要提前开辟空间,最坏情况一个容器包含另一个的所有元素,则目标容器的最大大小为二者中较小容器的大小。

	vector<int> v1;
	vector<int> v2;
	for (int i = 0; i < 5; i++){
		v1.push_back(i);
		v2.push_back(i + 2);
	}
	vector<int> t(v1.size()>v2.size() ? v2.size() : v1.size(), 0);
	auto it = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), t.begin());//返回最后一个迭代器
	for_each(t.begin(), it, myPrint());
	cout << endl;

执行结果:

 set_union

求并集

set_union(begin1(), end1(), begin2(), end2(), target.begin())

注:返回值为并集的最后一个迭代器。目标容器需要提前开辟空间,最坏情况两个容器互不包含,则最大的空间为两个容器大小之和。

程序:

	//求并集
	vector<int> v1;
	vector<int> v2;
	for (int i = 0; i < 5; i++){
		v1.push_back(i);
		v2.push_back(i + 2);
	}
	vector<int> t(v1.size()+v2.size(), 0);//最坏情况两个不包含对方
	auto it = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), t.begin());//返回最后一个迭代器
	for_each(t.begin(), it, myPrint());
	cout << endl;

结果:

set_difference

求差集

参数同前两节

注:要看是谁对谁的差集

A对B的差集,A中有,B中没有的元素。

最多也就是二者较大的容器大小

程序:

//求差集
	vector<int> v1 = { 1, 2, 3, 4, 5 };
	vector<int> v2 = { 6, 7, 8 };
	vector<int> t(v1.size()>v2.size()?v1.size():v2.size(), 0);//最坏情况两个不包含对方,差集大小为两个容器中的较大值,需要看是谁对谁的差集
	auto it = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), t.begin());//返回最后一个迭代器
	for_each(t.begin(), it, myPrint());
	cout << endl;

	vector<int> v3 = { 6, 7, 8 };
	vector<int> v4 = { 1, 2, 3, 4, 5 }; 
	vector<int> t2(v3.size()>v4.size() ? v3.size() : v4.size(), 0);//最坏情况两个不包含对方,差集大小为两个容器中的较大值,需要看是谁对谁的差集
	it = set_difference(v3.begin(), v3.end(), v4.begin(), v4.end(), t2.begin());//返回最后一个迭代器
	for_each(t2.begin(), it, myPrint());
	cout << endl;

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值