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集合容器的集合运算:并、交、差的更多相关文章

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

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

  2. C++STL之set集合容器

    set集合容器 set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构, 在 插入元素时, 它会自动调整二叉树的排列, 把该元素放到适当的位置, 以确保每个子树根节点的键 ...

  3. 编程体系结构(03):Java集合容器

    本文源码:GitHub·点这里 || GitEE·点这里 一.集合容器简介 集合容器是Java开发中最基础API模块,通常用来存储运行时动态创建的元素,基本特点如下: 泛型特点,存储任意类型对象: 动 ...

  4. multiset多重集合容器(常用的使用方法总结)

    关于C++STL中multiset集合容器的学习,看别人的代码一百遍,不如自己动手写一遍. multiset多重集合容器和set集合容器的使用方法大多相同,不同的是multiset多重集合容器允许重复 ...

  5. C++STL之multiset多重集合容器

    multiset多重集合容器 multiset与set一样, 也是使用红黑树来组织元素数据的, 唯一不同的是, multiset允许重复的元素键值插入, 而set则不允许. multiset也需要声明 ...

  6. multiset多重集合容器

    跟set集合容器相比,multiset多重集合容器也使用红黑树组织元素,仅仅是multiset多重集合容器同意将反复的元素键值插入.元素的搜索依旧具有对数级的算法时间复杂度,find和equal_ra ...

  7. C++ STL set集合容器

    汇总了一些set的常用语句,部分参考了这篇:http://blog.163.com/jackie_howe/blog/static/199491347201231691525484/ #include ...

  8. python 标准类库-数据类型之集合-容器数据类型

    标准类库-数据类型之集合-容器数据类型   by:授客 QQ:1033553122 Counter对象 例子 >>> from collections import Counter ...

  9. set集合容器(常用的使用方法总结)

     关于C++STL中set集合容器的学习,看别人的代码一百遍,不如自己动手写一遍. 构造set集合容器的目的是为了去重+排序+快速搜索.由于set集合容器实现了红黑树多的平衡二叉检索树的数据结构,在插 ...

随机推荐

  1. hadoop1.2.1+hbase0.90.4+nutch2.2.1+elasticsearch0.90.5配置(伪分布式)

    系统:ubuntu14.04 一.hadoop安装 ssh免密码登陆详情见上一篇博客. 解压hadoop1.2.1到某个目录下,这里解压到ubuntu下载目录下(注意没必要使用管理员权限) 在hado ...

  2. 【转】nand flash坏块管理OOB,BBT,ECC

    0.NAND的操作管理方式      NAND FLASH的管理方式:以三星FLASH为例,一片Nand flash为一个设备(device),1 (Device) = xxxx (Blocks),1 ...

  3. ajax+json+java

    1.首先下载json所以依赖的包, Json-lib 最新版 json-lib-2.3-jdk15.jar,其官方网站是:http://json-lib.sourceforge.net/可以直接dow ...

  4. Oracle基础学习5-- Oracle权限之”角色”

    不论什么与权限相关的东西都少不了"角色"的概念,Java如此,.Net如此,Oracle当然也不例外. 角色事实上就是权限的集合,将多个权限打包到一个角色中,这样每一个角色有特定的 ...

  5. [Redux] Generating Containers with connect() from React Redux (AddTodo)

    Code to be refacted: const AddTodo = (props, { store }) => { let input; return ( <div> < ...

  6. 创建httpd启动脚本并加入启动列表开机启动

    第一步: cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd   第二步: vim /etc/init.d/httpd 在第一行#!/bin/s ...

  7. JS转换Decimal带千分号的字符串显示

    var numberChars = "0123456789"; /* Convert to decimal string */ function toDecimalString(v ...

  8. exchange邮箱的”单点登陆“

    在跟exchange集成登陆时,通常有这样的需求,用户需要点击邮件链接的时候直接打开,不再需要输入用户名密码,实现所谓的单点登陆. 通常有两种方式 1.form认证 登陆原理:用js模拟表单登陆 代码 ...

  9. WIFI网络访问(一)

    一,WIFI 网卡有哪些状态? WIFI 总共有以下五个状态,实际就是一些整形常量: 1.   WIFI_STATE_DISABLED : WIFI 不能使用,其值是: 1 . 2.   WIFI_S ...

  10. 基于实际项目的SQL学习总结

    青云   随笔 - 2, 文章 - 0, 评论 - 1, 引用 - 0 一个项目涉及到的50个Sql语句(整理版) /* 标题:一个项目涉及到的50个Sql语句(整理版) 说明:以下五十个语句都按照测 ...