在sorted range上的操作(includes,set_union,set_intersection,set_difference)
includes
S1内含S2的一个子集合,如果元素在s2出现n次,在S1出现m次,若n>m则会返回false

//版本一:用operator <比较元素
template <class InputerIterator1,class InputerIterator2>
bool includes(InputerIterator1 first1,InputerIterator1 last1,InputerIterator2 first2,InputerIterator2 last2); //版本二:用自定义的function object比较元素
template <class InputerIterator1,class InputerIterator2,class StrictWeakOrdering>
bool includes(InputerIterator1 first1,InputerIterator1 last1,InputerIterator2 first2,InputerIterator2 last2,StrictWeakOrdering cmp);
测试已排序的[first2,last2)是否为[first1,last1)的子集,每个集合中的元素不必独一无二,如果某个元素在[first1,last1)出现m次,在[first2,last2)出现n次,如果m<n,则返回false
set_union
//版本一:用operator <比较元素
template <class InputerIterator1,class InputerIterator2,class OutputIterator>
OutputIterator set_union(InputerIterator1 first1,InputerIterator1 last1,
InputerIterator2 first2,InputerIterator2 last2,OutputIterator rseult);
{
while(first1!=last1 && first2!=last2)
{
//两个容器内的元素相比较,把较小者放入结果容器中,并向前移动迭代器
//如果两个元素相等则写入结果中,同时移动两个迭代器
if(*first1<*first2)
{
*result = *first;
++first1;
}
else if(*first2<*first1)
{
*result = *first;
++first2;
}
else
{
*result = *first1;
++first1;
++first2;
}
++result;
}
//把剩余的元素都拷贝进结果中
//copy返回迭代器指向目标容器的插入元素的最后一个元素的下一个元素
return copy(first2, last2, copy(first1, last1, result));
}
//版本二:用自定义的function object比较元素
template <class InputerIterator1,class InputerIterator2,class OutputIterator,class StrictWeakOrdering>
OutputIterator set_union(InputerIterator1 first1,InputerIterator1 last1,
InputerIterator2 first2,InputerIterator2 last2,
OutputIterator result,StrictWeakOrdering cmp);
构造已排序的[first2,last2)和[first1,last1)的并集,每个集合中的元素不必独一无二
- 如果某个元素在[first1,last1)出现m次,在[first2,last2)出现n次,在result中出现的次数为max(m,n)
 - 元素的相对顺序不会被改变,如果是两个集合中都有的元素,那么该元素是从第一个集合中复制来的(去除重复的元素)
 - 两个集合中的等价元素在result中,m个元素是从第一个range中复制来的,max(n-m,0)个元素从第二个range中复制来
 

set_intersection
//版本一:用operator <比较元素
template <class InputerIterator1,class InputerIterator2,class OutputIterator>
OutputIterator set_intersection(InputerIterator1 first1,InputerIterator1 last1,
InputerIterator2 first2,InputerIterator2 last2,OutputIterator rseult);
{
while(first1!=last1 && first2!=last2)
{
if(*first1<*first2)
{
++first1;
}
else if(*first2<*first1)
{
++first2;
}
else
{
*result = *first1;
++first1;
++first2;
++result;
}
}
return result;
}
//版本二:用自定义的function object比较元素
template <class InputerIterator1,class InputerIterator2,class OutputIterator,class StrictWeakOrdering>
OutputIterator set_intersection(InputerIterator1 first1,InputerIterator1 last1,
InputerIterator2 first2,InputerIterator2 last2,
OutputIterator result,StrictWeakOrdering cmp);
构造两个集合的交集,如果某个元素在[first1,last1)出现n次,在[first2,last2)出现m次,在result中出现的次数为min(n,m),所有元素赋值于[first1,last1),其他的与set_union相同, 他是一种稳定的操作

set_difference
- 构造两个集合的差集,result中的元素出现于第一个range但不出现于第二个range,他也是一种稳定的操作
 - 某个元素在[first1,last1)中拥有n个彼此等价的元素,在[first2,last2)中拥有m个彼此等价的元素,result中含有max(n-m)个彼此等价的元素,所有元素都复制于[first1,last1)
 

//版本一:用operator <比较元素
template <class InputerIterator1,class InputerIterator2,class OutputIterator>
OutputIterator set_difference(InputerIterator1 first1,InputerIterator1 last1,
InputerIterator2 first2,InputerIterator2 last2,OutputIterator rseult);
{
while(first1!=last1 && first2!=last2)
{
if(*first1<*first2)
{
*result = *first1;
++first;
++result;
}
else if(*first2<*first1)
{
++*first2;
}
else
{
++first1;
++first2;
}
}
return copy(first1, last1, result);
}
//版本二:用自定义的function object比较元素
template <class InputerIterator1,class InputerIterator2,class OutputIterator,class StrictWeakOrdering>
OutputIterator set_difference(InputerIterator1 first1,InputerIterator1 last1,
InputerIterator2 first2,InputerIterator2 last2,
OutputIterator result,StrictWeakOrdering cmp);
set_symmetric_difference
- 构造出两个集合之对称差,结果集包含出现于第一个range的元素但不出现于第二个range的元素以及出现于第二个range的元素但不出现于第一个range的元素,他也是一种稳定的操作,输入区间的元素相对顺序不会被改变
 - 某个元素在[first1,last1)中拥有n个彼此等价的元素,在[first2,last2)中拥有m个彼此等价的元素,result中含有|n-m|个彼此等价的元素,若n>m,则result元素中最后n-m个将由[first1,last1)复制来,若n<m,则result元素中最后m-n个将由[first2,last2)复制来
 
//版本一:用operator <比较元素
template <class InputerIterator1,class InputerIterator2,class OutputIterator>
OutputIterator set_symmetric_difference(InputerIterator1 first1,InputerIterator1 last1,
InputerIterator2 first2,InputerIterator2 last2,OutputIterator rseult);
{
while(first1!=last1 && first2!=last2)
{
if(*first1<*first2)
{
*result = *first1;
++first1;
++result;
}
if(*first2<*first1)
{
*result = *first2;
++first2;
++result;
}
else
{
++first1;
++first2;
}
}
return copy(first1, last1, copy(first2, last2, result));
}
//版本二:用自定义的function object比较元素
template <class InputerIterator1,class InputerIterator2,class OutputIterator,class StrictWeakOrdering>
OutputIterator set_symmetric_difference(InputerIterator1 first1,InputerIterator1 last1,
InputerIterator2 first2,InputerIterator2 last2,
OutputIterator result,StrictWeakOrdering cmp);
在sorted range上的操作(includes,set_union,set_intersection,set_difference)的更多相关文章
- redis数据类型:sorted sets类型及操作
		
sorted sets类型及操作: sorted set是set的一个升级版本,它是在set的基础上增加了一个顺序 属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会 自动重新按新的值 ...
 - C# 使用 Index 和 Range 简化集合操作
		
C# 使用 Index 和 Range 简化集合操作 Intro 有的语言数组的索引值是支持负数的,表示从后向前索引,比如:arr[-1] 从 C# 8 开始,C# 支持了数组的反向 Index,和 ...
 - Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作
		
(11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require ...
 - Error is 10055 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
		
今天上午,一个同事反映:某系统的某个通过socket来进行通信的服务无法连接上数据库里,在操作系统上用数据库的客户端测试数据库连接也出现这样的错误信息:Error is 10055 由于系统缓冲区空间 ...
 - 将项目Demo上传到Github上的操作步骤
		
之前我有很多代码直接上传到了CSDN上,主要是因为操作方便,今天我就说说将源码Demo上传到Github上的操作步骤. 首先,你要先确定自己在Github上有自己的账户名,账户邮箱和密码.如果没有可以 ...
 - Windows服务器【由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作】问题调查
		
今天测试反应了一个问题,说接口返回的速度变慢了,并且返回的数据也不对.然后就找到了我o(╥﹏╥)o. 第一个反应就是查日志,不查不要紧,一查吓一跳,整个服务器上所有的站点都报错了.异常信息如下: Sy ...
 - python-web自动化-文件上传操作(非input标签的上传,需要借助第三方工具)
		
文件上传操作 一.文件上传分两种情况:1. 如果是input可以直接输入路径的,可以直接调send_keys输入路径 2. 非input标签的上传,需要借助第三方工具: 2.1 Autolt 需 ...
 - 定时备份windows机器上的文件到linux服务器上的操作梳理(rsync)
		
由于需要对网络设备做备份,备份文件是放到windows机器上的.现在需要将备份数据同步到linux备份机器上,想到的方案有三种: 1)将windows的备份目录共享出来,然后在linux服务器上进行挂 ...
 - tf.reduce_sum         tensorflow维度上的操作
		
tensorflow中有很多在维度上的操作,本例以常用的tf.reduce_sum进行说明.官方给的api reduce_sum( input_tensor, axis=None, keep_dims ...
 
随机推荐
- Centos7部署kubernetes Proxy(七)
			
1.配置kube-proxy使用LVS(三个节点都装上去) [root@linux-node1 ssl]# yum install -y ipvsadm ipset conntrack [root@l ...
 - 杭电多校第七场 1010 Sequence(除法分块+矩阵快速幂)
			
Sequence Problem Description Let us define a sequence as below f1=A f2=B fn=C*fn-2+D*fn-1+[p/n] Your ...
 - [Paper] LCS: An Efficient Data Eviction Strategy for Spark
			
Abstract Classical strategies do not aware of recovery cost, which could cause system performance de ...
 - lftp的安装
			
lftp的安装 安装依赖的包 yum -y install make readline-devel gnutls* 解压上传的包 tar -jxf lftp-4.0.1.tar.bz2 cd到解压 ...
 - mac os x lipo 工具
			
lipo是管理Fat文件的工具,可以查看平台列表,提取.重新打包 dreamdeMac-mini:test dream$ lipo -info libtest001.a Architectures i ...
 - Django之模版层-语法:标签 {% %}
			
标签 {% %} for循环以及for..empty.. <h4>for标签</h4> {% for i in lis %} <p>{{ i }}</p> ...
 - Gym - 101480 CERC 15:部分题目题解(队内第N次训练)
			
-------------------题目难度较难,但挺有营养的.慢慢补. A .ASCII Addition pro:用一定的形式表示1到9,让你计算加法. sol:模拟. solved by fz ...
 - Gym 102091A: Flying Squirrel(RMQ)
			
题意:如图,有N个柱子,每次我可以从高柱子X到低柱子Y,而且需要满足中间的柱子都小于X的高度. 思路:现在有Q次询问,每次给定(X,Y),(如果ht[X]<ht[Y],则交换XY),问X为起点, ...
 - 利用SIFT进行特征匹配
			
SIFT算法是一种基于尺度空间的算法.利用SIFT提取出的特征点对旋转.尺度变化.亮度变化具有不变性,对视角变化.仿射变换.噪声也有一定的稳定性. SIFT实现特征的匹配主要包括四个步骤: 提取特征点 ...
 - HDU2021发工资咯:)
			
Problem Description 作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵 但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处 ...