有序数据结构的交与并

需要注意:
1:求并集和交集前,需要将两个数组先进行排序 (int 或者 vector都需要),否则结果有误

2:需要定义vector的size,否则可能无法得到结果

 

vector的并

#include <bits/stdc++.h>
using namespace std;
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;
}

 

vector的交

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a[4]={1,2,3,4}; //已经有序,若无序,需要排序!
    int b[4]={2,3,4,5};
    vector<int> c(8);
    auto 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 的并

#include <bits/stdc++.h>
using namespace std;
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 的交

#include <bits/stdc++.h>
using namespace std;
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;
}

  

 

P05524. 集合

Description
给定两个集合A、B,集合内的任一元素x满足1 ≤ x ≤ 10^9,并且每个集合的元素个数不大于10^5。

我们希望求出只需确定在B 中但是不在 A 中的元素的个数即可

Format
Input
输入两行,分别表示两个集合

每行的第一个整数为这个集合的元素个数(至少一个),然后紧跟着这个集合的元素(均为不同的正整数)

Output
在B 中但是不在 A 中的元素的个数即可

Samples
输入数据 1
8 1 2 3 4 5 6 7 8
6 2 3 4 5 6 7
输出数据 1
0

 

#include<bits/stdc++.h>
using namespace std;
set<int>s1,s2,ans;
int main()
{
	int n,m;
	cin>>n;
	for(int i=1,x;i<=n;i++)
	{
		scanf("%d",&x);
		s1.insert(x);
	}
	cin>>m;
	for(int i=1,x;i<=m;i++)
	{
		scanf("%d",&x);
		s2.insert(x);
	}
    set_difference( s2.begin(), s2.end(),s1.begin(), s1.end(),inserter(ans,ans.begin() )   ); 
    cout<<ans.size()<<endl;
}

  

 

典型试题

P05525. [Shoi2007] Setstack 集合堆栈机

posted @ 2023-11-17 11:58  我微笑不代表我快乐  阅读(13)  评论(0编辑  收藏  举报