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集合容器实现了红黑树多的平衡二叉检索树的数据结构,在插 ...
随机推荐
- CDH 1、CDH简介
1.Apache Hadoop 不足之处 • 版本管理混乱 • 部署过程繁琐.升级过程复杂 • 兼容性差 • 安全性低 2.Hadoop 发行版 • Apache Hadoop • Cloudera’ ...
- 查看Java包源码
- HBase的基本操作
1.输入hbase shell进入HBase shell
- Dreamweaver8卡死打开初始化(缓存重建)失败的解决的方法
无论是中文版的dreamweaver 8,还是英文版本号的dw8或绿色版本号的DW8,都可能出现打开时卡死无法启动的情况,这个bug的出现是由于先前你以前在使用dreamweaver 8的时候,定义了 ...
- c++引擎开发
MyMap.erase(Itor++); //在windows下也可以Itor = MyMap.erase(Itor),但是在linux下不行. 一个是把指针定为const .就是不能修改指针.也就是 ...
- Android应用程序请求SurfaceFlinger服务创建Surface的过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/7884628 前面我们已经学习过Android应 ...
- Unity sqlite学习笔记一
1.SQLITE的常识 SQLite是一个开源免费的数据库,一般用于嵌入系统或者小规模的应用软件开发中,你可以像使用Access一样使用它. sqlite的主要优点:零配置(Zero Configur ...
- ubuntu系统分区方案
一.各文件及文件夹的定义 /bin:bin是binary(二进制)的缩写.存放必要的命令 存放增加的用户程序. /bin分区,存放标准系统实用程序./boot:这里存放的是启动LINUX时使用的一些核 ...
- DWZ在APS.NET WebForm中的使用(一)
1.前言 在最近的项目开发中,使用到了前端框架DWZ.DWZ是一款较为优秀的后台管理界面框架,但官方发布的文档确实令人汗颜,简单几页了事,有点对自己的产品不负责任了.同时感谢网友石头的热心帮助,在我这 ...
- WebConfig
花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <? ...