multiset集合容器的集合运算:并、交、差
set和multiset的内部通常是采用平衡二叉树来实现。当放入元素时,会按照一定的排序方法自动排序,默认是按照less<>排序规则来排序。这种自动排序的特性加速了元素查找的过程,但问题是:不可以直接修改set或multiset容器中的元素值,因为这样就违反了元素自动排序的规则。如果想修改一个元素的值,则必须先删除原有的元素,再插入新的元素。
multiset容器的集合并、交、差运算(注意:并集运算的结果)
#include "stdafx.h"
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int_tmain(int argc, _TCHAR* argv[])
{
const int N=10;
int a[N] = {4,1,1,1,1,1,0,5,1,0};
int b[N] = {4,4,2,4,2,4,0,1,5,5};
multiset<int> A(a,a+N);
multiset<int> B(b,b+N);
multiset<int> C,D;
cout<<"Set A:";
copy(A.begin(),A.end(),ostream_iterator<int>(cout,""));
cout<<endl;
cout<<"Set B: ";
copy(B.begin(),B.end(),ostream_iterator<int>(cout,""));
cout<<endl;
cout<<"Union (A and B): ";
set_union(A.begin(),A.end(),B.begin(),B.end(),ostream_iterator<int>(cout,""));
cout<<endl;
cout<<"Union (B and A): ";
set_union(B.begin(),B.end(),A.begin(),A.end(),ostream_iterator<int>(cout,""));
cout<<endl;
cout<<"Intersection (A and B): ";
set_intersection(A.begin(),A.end(),B.begin(),B.end(),ostream_iterator<int>(cout,""));
cout<<endl;
cout<<"Intersection (B and A): ";
set_intersection(B.begin(),B.end(),A.begin(),A.end(),ostream_iterator<int>(cout,""));
cout<<endl;
set_difference(A.begin(),A.end(),B.begin(),B.end(),inserter(C,C.begin()));
cout<<"Set C(difference of A and B): ";
copy(C.begin(),C.end(),ostream_iterator<int>(cout,""));
cout<<endl;
set_difference(B.begin(),B.end(),A.begin(),A.end(),inserter(D,D.begin()));
cout<<"Set D(difference of B and A): ";
copy(D.begin(),D.end(),ostream_iterator<int>(cout,""));
cout<<endl;
return 0;
}
执行结果:
注意并集:最终结果中的相同元素的个数取集合中最多的数目,如此处求并集时0的个数取的是集合A的个数,为两个;5的个数取的是B中的数目,为两个。
因此,两个集合的并、交满足交换率,而差则不满足交换律,符合数学原理。
multiset集合容器的集合运算:并、交、差的更多相关文章
- STL中的set集合容器进行集合运算:并、交、差实例
集合容器的集合运算:并.交.差: #include "stdafx.h" #include <iostream> #include <set> #inclu ...
- C++STL之set集合容器
set集合容器 set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构, 在 插入元素时, 它会自动调整二叉树的排列, 把该元素放到适当的位置, 以确保每个子树根节点的键 ...
- 编程体系结构(03):Java集合容器
本文源码:GitHub·点这里 || GitEE·点这里 一.集合容器简介 集合容器是Java开发中最基础API模块,通常用来存储运行时动态创建的元素,基本特点如下: 泛型特点,存储任意类型对象: 动 ...
- multiset多重集合容器(常用的使用方法总结)
关于C++STL中multiset集合容器的学习,看别人的代码一百遍,不如自己动手写一遍. multiset多重集合容器和set集合容器的使用方法大多相同,不同的是multiset多重集合容器允许重复 ...
- C++STL之multiset多重集合容器
multiset多重集合容器 multiset与set一样, 也是使用红黑树来组织元素数据的, 唯一不同的是, multiset允许重复的元素键值插入, 而set则不允许. multiset也需要声明 ...
- multiset多重集合容器
跟set集合容器相比,multiset多重集合容器也使用红黑树组织元素,仅仅是multiset多重集合容器同意将反复的元素键值插入.元素的搜索依旧具有对数级的算法时间复杂度,find和equal_ra ...
- C++ STL set集合容器
汇总了一些set的常用语句,部分参考了这篇:http://blog.163.com/jackie_howe/blog/static/199491347201231691525484/ #include ...
- python 标准类库-数据类型之集合-容器数据类型
标准类库-数据类型之集合-容器数据类型 by:授客 QQ:1033553122 Counter对象 例子 >>> from collections import Counter ...
- set集合容器(常用的使用方法总结)
关于C++STL中set集合容器的学习,看别人的代码一百遍,不如自己动手写一遍. 构造set集合容器的目的是为了去重+排序+快速搜索.由于set集合容器实现了红黑树多的平衡二叉检索树的数据结构,在插 ...
随机推荐
- Timer和TimerTask
目录结构: Timer和TimerTask 一个Timer调度的例子 如何终止Timer线程 关于cancle方式终止线程 反复执行一个任务 schedule VS. scheduleAtFixedR ...
- HTTP请求的TCP瓶颈分析[转]
阅读目录 延迟的因素 速度延时 带宽延时 最后一公里延时-tracerouter 目标 rwnd的设置 慢启动过程 慢启动的影响 慢启动对HTTP影响的一次计算 拥塞窗口的合适值 服务器配置调优 应用 ...
- android stagefright基本流程总结
数据流的封装一. 由数据源DataSource生成MediaExtractor. 通过MediaExtractor::Create(dataSource)来实现.Create方法通过两步来生成相应的M ...
- SQL Server2008R2安装失败问题之语言包问题
今天安装SQL Server2008 的时候出现了,如下的的问题,安装过程在ExcuteStandardTimingsWorkflow时候报错,结束安装. 提示: ...
- 加密html
2009年4月4日 周六 22:18 <HTML> <HEAD> <meta http-equiv="Content-Type" content=&q ...
- JavaMail简单接收邮件
一个简单的例子,收取所有邮件并在控制台输出. package cn.jmail.test; import java.io.*; import java.util.*; import javax.mai ...
- win7使用右键导致死机、假死、explorer无法响应的解决方法
右键引起explorer无法响应,奔溃,主要是由于COMCTL32.DLL和COMCTL21.OCX文件引起的 描述:comctl32.dll是Windows应用程序公用GUI图形用户界面模块.报告提 ...
- AngularJS 中的 Promise 和 设计模式
解决 Javascript 异步事件的传统方式是回调函数:调用一个方法,然后给它一个函数引用,当这个方法完结的时候执行这个函数引用. <!-- lang: js --> $.get('ap ...
- 研究 Javascript的&&和||的另类用法
这篇文章主要介绍了Javascript的&&和||的另类用法,需要的朋友可以参考下 最近也没什么心思写文章了,感觉总有忙不完的事情,呵. 不过这些天又开始研究起 Titanium 来, ...
- 「北京」京东 JD.COM 招聘中/高级前端工程师
工作职责: 负责前端界面的前端构建,各类交互设计与实现: 前端样式和脚本的模块设计及优化: 协同后台开发人员完成项目: 职位要求: 专科及以上学历,2年以上前端重构与脚本开发经验,计算机或相关专业者优 ...