首页 > 其他分享 >有序数据结构的交与并

有序数据结构的交与并

时间:2023-11-17 12:12:14浏览次数:33  
标签:交与 main set int namespace include vector 有序 数据结构

需要注意:
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;
}

  

标签:交与,main,set,int,namespace,include,vector,有序,数据结构
From: https://www.cnblogs.com/cutemush/p/17838366.html

相关文章

  • 什么是数据结构里的 Merkle 树
    Merkle树,也被称为"hashtree",是一种二叉树的数据结构。这种树的每个节点都是基于其子节点的一种特殊形式的hash。具体来说,叶节点的hash是由存储在那里的数据块(例如文件或文件的部分)生成的,而非叶节点的hash是由其子节点的hash生成的。如果Merkle树只有一个节点(也就是根......
  • 数据结构C语言之线性表
    发现更多计算机知识,欢迎访问Cr不是铬的个人网站1.1线性表的定义线性表是具有相同特性的数据元素的一个有限序列对应的逻辑结构图形:从线性表的定义中可以看出它的特性:(1)有穷性:一个线性表中的元素个数是有限的(2)一致性:一个线性表中所有元素的性质相同,即数据类型相同(3)序列性:各......
  • 10--977. 有序数组的平方
    给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]示例2:输入:nums=[-7,-3,2,3,11]......
  • 浙江大学数据结构陈越 第一讲 数据结构和算法
    数据结构数据结构是计算机科学中用来组织和存储数据的方式。它可以理解为一种组织数据的方式,能够有效地管理和操作数据,以及提供对数据进行存储、检索、更新和删除等操作的方法。常见的数据结构包括数组、链表、栈、队列、树和图等,它们各自适用于不同的应用场景,并且有着不同的特点和......
  • 数据结构——字典树 学习笔记
    数据结构——字典树学习笔记字典树,也叫trie树。检索字符串本质是记录字符串前缀的一棵查找树,形态类似于:字典树使用边表示字母,节点表示一个前缀,同时也可以在节点上记录状态\(\mathit{tag}\)。基本实现形如:var: nex[0..siz][0..rng],idx est[0..siz],pre[0..siz]fun......
  • Redis数据结构之动态字符串SDS
    动态字符串SDS我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题:V获取字符串长度的需要通过运算V非二进制安全V不可修改Redis构建了一种新的字......
  • 数据结构图的基本知识题
    判断题1.在n个结点的无向图中,若边数大于n-1,则该图必是连通图。​ TF解释:以下两种说法是对的:在n个结点的无向图中,若该图是连通图,则其边数大于等于n-1,在n个结点的无向图中,若边数大于(n-2)(n-1)/2,则该图必是连通图就是说连通是比较强的条件......
  • 数据结构图的基本知识题
    判断题1.在n个结点的无向图中,若边数大于n-1,则该图必是连通图。​ TF解释:以下两种说法是对的:在n个结点的无向图中,若该图是连通图,则其边数大于等于n-1,在n个结点的无向图中,若边数大于(n-2)(n-1)/2,则该图必是连通图就是说连通是比较强的条件......
  • 对几种语言的数据结构的总结
    一:Java中的数据结构Java中有以下几种数据结构:线性结构:数组、链表、哈希表、队列、栈。非线性结构:堆、树(二叉树、B树、B+树、红黑树)、图。二:C语言中的数据结构C语言中常用的数据结构包括:线性结构:数组、链表、栈、队列、线性表。树形结构:二叉树、堆、哈夫曼树、红黑树。图形结构:图......
  • Innodb索引数据结构灵魂拷问
    问题1:Innodb数据结构为什么要用B+树,如果比红黑树要好的话,为什么JavaHashMap不用B+树而用红黑树?如果数据全在内存的话,红黑树要比B+树好,查找次数比B+树要少很多,B+树适合磁盘IO,因为一次IO可以加载很多节点数据,查找次数虽多但IO次数少。红黑树是瘦长的,B+树是矮胖的。IO的次数取决于......