【STL】集合运算
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】集合运算的更多相关文章
- 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 ...
- STL中的set集合容器进行集合运算:并、交、差实例
集合容器的集合运算:并.交.差: #include "stdafx.h" #include <iostream> #include <set> #inclu ...
- 【Java EE 学习 28 上】【oracle学习第二天】【子查询】【集合运算】【几种数据库对象】
一.子查询 1.为什么要使用子查询:问题不能一步求解或者一个查询不能通过一步查询得到. 2.分类:单行子查询和多行子查询. 3.子查询的本质:一个查询中包含了另外一个或者多个查询. 4.使用子查询的规 ...
- 详解SQL集合运算
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 ...
- SQL集合运算参考及案例(一):列值分组累计求和
概述 目前企业应用系统使用的大多数据库都是关系型数据库,关系数据库依赖的理论就是针对集合运算的关系代数.关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式.不过我们在工作中发现,很多人 ...
- Oracle学习之集合运算
一.集合运算操作符 UNION:(并集)返回两个集合去掉重复值的所有的记录 UNION ALL:(并集)返回两个集合去掉重复值的所有的记录 INTERSECT:(交集)返回两个集合的所有记录,重复 ...
- Oracle学习(七):集合运算
1.知识点:能够对比以下的录屏进行阅读 SQL> -- 查询10和20号部门的员工的3种方法 SQL> --1. select * from emp where deptno in (10 ...
- sql的集合运算
表的加减法 union:使用union 对表进行假发(并集)运算, union等集合运算符通常都会去除重复记录. select shohin_id, shohin_mei from shohin un ...
- [Swust OJ 632]--集合运算(set容器)
题目链接:http://acm.swust.edu.cn/problem/632/ Time limit(ms): 1000 Memory limit(kb): 65535 Description ...
- SQL集合运算 差集 并集 交
SQL-3标准中提供了三种对检索结果进行集合运算的命令:并集UNION:交集INTERSECT:差集EXCEPT(在Oracle中叫做 MINUS).在有些数据库中对此的支持不够充分,如MySql中只 ...
随机推荐
- IT 达人
1. 手机与电脑多屏互动 [教程]华为多屏互动功能与PC win7的连接 要求手机和电脑必须在同一局域网内,且手机必须支持多屏互动功能. 操作步骤如下: PC 端: services.msc,启动下面 ...
- DDD实战8_1 实现对领域中连接字符串的可配置
1.在webapi的配置文件中配置连接字符串节 2.在webapi的startup类中的Configure方法中 将工具类里面AppSetting的静态Section的值 对应上webapi的配置文件 ...
- 图解Http协议 url长度限制
http请求报文的格式 一般请求所带有的属性: http响应报文的格式: 响应首部一般包含如下内容: 一.技术基石及概述 问:什么是HTTP? 答:HTTP是一个客户端和服务器端请求和响应的标准TCP ...
- VC6下深入理解new[]和delete[](在多线程下new和delete的时候,必须选择上多线程库,不然可能造成进程崩溃)
多少年了,一直处于C与C++混用的状态,申请空间一直用malloc,释放空间一直用free,为什么?因为他们好理解易操作,就如同输出一直用printf而不用<<,输入一直用scanf而不用 ...
- Hibernate_12_HQL句子
使用HQL查询功能: (1)与SQL相似,SQL用. (2)SQL查询的是表和表中的列.HQL查询的是对象与对象中的属 (3)HQL的keyword不区分大写和小写,类名与属性名是区分大写和小写 (4 ...
- 解决引用 System.Windows.Interactivity程序集生成多国语言文件夹fr、es、ja等问题
原文:解决引用 System.Windows.Interactivity程序集生成多国语言文件夹fr.es.ja等问题 通过以下方式对 System.Windows.Interactivity程序集添 ...
- 你好,Oh My Zsh - 社区力量全新方式定义命令行 | 咖啡时间
Oh My Zsh 是一款社区驱动的命令行工具,正如它的主页上说的,Oh My Zsh 是一种生活方式.它基于 zsh 命令行,提供了主题配置,插件机制,已经内置的便捷操作.给我们一种全新的方式使用命 ...
- 有了VARCHAR,为什么还要有CHAR?
VarcharVarchar往往用来保存可变长度的字符串.简单的说,我们只是给其固定了一个最大值,然后系统会根据实际存储的数据量来分配合适的存储空间.为此相比CHAR字符数据而言,其能够比固定长度类型 ...
- HTTP协议-请求报文
- Win10 UWP版《芒果TV》v2.4.0直播超女,芒果台综艺一网打尽
Win10 UWP版<芒果TV>直播超女,芒果台综艺一网打尽 Win10版UWP<芒果TV>自2015年9月登录商店以来,一直在持续更新,积极改进,拥有芒果台视频的独家点播和直 ...