STL中有可以实现交集、并集、差集、对称差集的算法。

使用前需要包含头文件:

#include <algorithm>

注:使用计算交集和并集的算法必须保证参与运算的两个集合有序!!!

交集:

例:求{1,2,3}和{2,3,4}的交集:

需要用到函数:

set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin()));

第一个参数和第二个参数是迭代器的形式,指定了第一个集合参与运算的范围。

第三个参数和第四个参数同样是迭代器的形式,指定了第二个集合参与运算的范围。

第五个参数是插入迭代器,它又包含两个参数,第一个参数指定了用来保存计算结果的集合,第二个参数是迭代器的形式,指定了计算结果插入在对应集合的哪个位置之前。

后面计算并集、差集、对称差集的函数与计算交集的函数用法相同,不再赘述。

代码:

#include <bits/stdc++.h>
#define re register
#define e endl
using namespace std;
const int N = 100005;
vector<int> v1, v2, v3;
inline int read(){
	int f = 0, x = 0; char ch;
	do {ch = getchar(); f |= ch == '-';} while (!isdigit(ch));
	do {x = (x << 3) + (x << 1) + (ch ^ 48); ch = getchar();} while (isdigit(ch));
	return f ? -x : x;
}
int main(){
	for (re int i = 1; i <= 3; ++i)v1.push_back(i);//v1 1 2 3
	for (re int i = 2; i <= 4; ++i)v2.push_back(i);//v2 2 3 4
	set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin()));//v3 2 3
	for (re int i = 0; i < v3.size(); ++i)cout << v3[i] << ' ';
	return 0;
}

并集:

例:求{1,2,3}和{2,3,4}的并集:

需要用到函数:

set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin()));

代码:

#include <bits/stdc++.h>
#define re register
#define e endl
using namespace std;
const int N = 100005;
vector<int> v1, v2, v3;
inline int read(){
	int f = 0, x = 0; char ch;
	do {ch = getchar(); f |= ch == '-';} while (!isdigit(ch));
	do {x = (x << 3) + (x << 1) + (ch ^ 48); ch = getchar();} while (isdigit(ch));
	return f ? -x : x;
}
int main(){
	for (re int i = 1; i <= 3; ++i)v1.push_back(i);//v1 1 2 3
	for (re int i = 2; i <= 4; ++i)v2.push_back(i);//v2 2 3 4
	set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin()));//v3 1 2 3 4
	for (re int i = 0; i < v3.size(); ++i)cout << v3[i] << ' ';
	return 0;
}

差集:

例:求{1,2,3}和{2,3,4}的差集:

需要用到函数:

set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin()));

代码:

#include <bits/stdc++.h>
#define re register
#define e endl
using namespace std;
const int N = 100005;
vector<int> v1, v2, v3;
inline int read(){
	int f = 0, x = 0; char ch;
	do {ch = getchar(); f |= ch == '-';} while (!isdigit(ch));
	do {x = (x << 3) + (x << 1) + (ch ^ 48); ch = getchar();} while (isdigit(ch));
	return f ? -x : x;
}
int main(){
	for (re int i = 1; i <= 3; ++i)v1.push_back(i);//v1 1 2 3
	for (re int i = 2; i <= 4; ++i)v2.push_back(i);//v2 2 3 4
	set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin()));//v3 1
	for (re int i = 0; i < v3.size(); ++i)cout << v3[i] << ' ';
	return 0;
}

对称差集:

例:求{1,2,3}和{2,3,4}的对称差集:

需要用到函数:

set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin()));

代码:

#include <bits/stdc++.h>
#define re register
#define e endl
using namespace std;
const int N = 100005;
vector<int> v1, v2, v3;
inline int read(){
	int f = 0, x = 0; char ch;
	do {ch = getchar(); f |= ch == '-';} while (!isdigit(ch));
	do {x = (x << 3) + (x << 1) + (ch ^ 48); ch = getchar();} while (isdigit(ch));
	return f ? -x : x;
}
int main(){
	for (re int i = 1; i <= 3; ++i)v1.push_back(i);//v1 1 2 3
	for (re int i = 2; i <= 4; ++i)v2.push_back(i);//v2 2 3 4
	set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin()));//v3 1 4
	for (re int i = 0; i < v3.size(); ++i)cout << v3[i] << ' ';
	return 0;
}

【STL】集合运算的更多相关文章

  1. Problem B: STL——集合运算

    Description 集合的运算就是用给定的集合去指定新的集合.设A和B是集合,则它们的并差交补集分别定义如下: A∪B={x|x∈A∨x∈B} A∩B={x|x∈A∧x∈B} A-B={x|x∈A ...

  2. STL中的set集合容器进行集合运算:并、交、差实例

    集合容器的集合运算:并.交.差: #include "stdafx.h" #include <iostream> #include <set> #inclu ...

  3. 【Java EE 学习 28 上】【oracle学习第二天】【子查询】【集合运算】【几种数据库对象】

    一.子查询 1.为什么要使用子查询:问题不能一步求解或者一个查询不能通过一步查询得到. 2.分类:单行子查询和多行子查询. 3.子查询的本质:一个查询中包含了另外一个或者多个查询. 4.使用子查询的规 ...

  4. 详解SQL集合运算

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 ...

  5. SQL集合运算参考及案例(一):列值分组累计求和

    概述 目前企业应用系统使用的大多数据库都是关系型数据库,关系数据库依赖的理论就是针对集合运算的关系代数.关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式.不过我们在工作中发现,很多人 ...

  6. Oracle学习之集合运算

    一.集合运算操作符  UNION:(并集)返回两个集合去掉重复值的所有的记录  UNION ALL:(并集)返回两个集合去掉重复值的所有的记录 INTERSECT:(交集)返回两个集合的所有记录,重复 ...

  7. Oracle学习(七):集合运算

    1.知识点:能够对比以下的录屏进行阅读 SQL> -- 查询10和20号部门的员工的3种方法 SQL> --1. select * from emp where deptno in (10 ...

  8. sql的集合运算

    表的加减法 union:使用union 对表进行假发(并集)运算, union等集合运算符通常都会去除重复记录. select shohin_id, shohin_mei from shohin un ...

  9. [Swust OJ 632]--集合运算(set容器)

    题目链接:http://acm.swust.edu.cn/problem/632/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  10. SQL集合运算 差集 并集 交

    SQL-3标准中提供了三种对检索结果进行集合运算的命令:并集UNION:交集INTERSECT:差集EXCEPT(在Oracle中叫做 MINUS).在有些数据库中对此的支持不够充分,如MySql中只 ...

随机推荐

  1. OpenMP 并行程序设计入门

    OpenMP 是一个编译器指令和库函数的集合,主要是为共享式存储计算机上的并行程序设计使用的. 0. 一段使用 OpenMP 的并行程序 #include <stdio.h> #inclu ...

  2. Leetcode 136 Single Number 亦或

    题意就是从一堆数中找出唯一的一个只存在一个的数.除了那个数,其他的数都是两个相同的数. 通过亦或的性质: 1)a^a = 0 0^a = a 2)交换律 a^b = b^ a 3)结合律 (a^b)^ ...

  3. WPF使用矢量字体图标(阿里巴巴iconfont)

    原文:WPF使用矢量字体图标(阿里巴巴iconfont) 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/lwwl12/article/details/78 ...

  4. WPF编游戏系列 之六 动画效果(1)

    原文:WPF编游戏系列 之六 动画效果(1)        本篇主要针对界面进行动画效果处理.首先在打开或关闭界面时,使其产生动态效果而不是生硬的显示或消失(如下图).其次在鼠标放到关闭窗口图标上时, ...

  5. C# WebApi使用AttributeRoutes特性路由

    1.在创建WebApi中默认的路由规则,只能满足一般简单的RESTful风格,如 api/Products/{id}. 但是在实际运用中很难严格满足RESTful要求的WebApi.因此需要使用高版本 ...

  6. 在2005年,Unicode 的第十万个字符被采纳且认可成为标准之一(超过这65535范围的Unicode字符,则需要使用一些诡异的技巧来实现)

    在计算机科学领域中,Unicode(统一码.万国码.单一码.标准万国码)是业界的一种标准,它可以使电脑得以体现世界上数十种文字的系统.Unicode 是基于通用字符集(Universal Charac ...

  7. Java泛型和类型安全的容器

    示例: public class Apple { private static long counter; private final long id = counter++; public long ...

  8. 关于powerdesigner中的data types说明

    原文:关于powerdesigner中的data types说明 这一堆的数据类型看着真是头大,弄个表格对照一下. Numeric data types Standard datatype DBMS- ...

  9. 什么是.NET Native?

    使用CoreRT将.NET Core发布为Native应用程序 - KAnts - 博客园 http://www.cnblogs.com/ants/p/8630332.html Microsoft . ...

  10. Android零基础入门第1节:Android的前世今生

    原文:Android零基础入门第1节:Android的前世今生 现在网上有很多各色Android资料了,但相对来说还是比较零散,Android覆盖的范围极广,最近刚好有机会全部拉通整理一遍,也保存起来 ...