博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C++从内部结构到应用】
阅读量:5149 次
发布时间:2019-06-13

本文共 911 字,大约阅读时间需要 3 分钟。

    关联容器不同于顺序容器的是,顺序容器底层用数组实现,为线性结构,而关联容器在实现中,用到的非线性存储方式;顺序容器是通过元素在容器中的位置顺序存储和访问元素,而关联容器是通过键(key)存储和读取元素的。c++标准模板库中,关联容器有set、multiset、map、multimap.

    1.底层原理
    我们已经说过,关联容器底层实现是用非线性存储方式,那么这种非线性存储方式是什么呢?答案是"红黑树"(RB-Tree),红黑树是平衡二叉树的一种,其有以下特点:
    (1)所有左子树结点的值小于等于根节点的值,右子树节点的值大于根节点的值。
    (2)没有一个节点深度过大。
    通过上面,就可以知道,关联容器是平衡二叉树的具体应用,因为其内部是通过链表的方式组织,所以在插入的时候比vector要快,比list要慢;由于其底层是平衡二叉树,查找、插入、删除时间复杂度都应该为O(logN.

    2.set
    set就是一个集合,组内的元素是唯一的,并且按一定的顺序排列。每个元素可以看成一个键或者一个值

    3.multiset
    multiset与set的唯一区别是,支持一个键多次出现。

    4.map
    map同时拥有实值(value)和键值(key),其每一个元素都是pair,pair的第一个元素是键值,第二个元素是实值。键用作元素在 map 中的索引,而值则表示所存储和读取的数据

    5.multimap
    map不允许两个元素拥有相同的键值,而multimap允许存在重复的键值。

    6.关联容器的选择
    map和set的底层实现都是很RB-tree,这两种类型的对象所包含的元素都具有不同的键,不允许为同一个键添加第二个元素。
    如果一个键必须对应多个实例,则需使用 multimap 或 multiset,这两种类型允许多个元素拥有相同的键。
    关联容器中,只有map支持下表操作。
    一般来说,如果希望有效地存储不同值的集合,那么使用 set 容器比较合适,而 map 容器则更适用于需要存储(乃至修改)每个键所关联的值的情况。

 

 

转载于:https://www.cnblogs.com/52bokeyuan1314/p/3343968.html

你可能感兴趣的文章
01背包
查看>>
Openscada远程配置
查看>>
博客盈利请先考虑这七点
查看>>
使用 XMLBeans 进行编程
查看>>
XML 解析---dom解析和sax解析
查看>>
Gamescom2014:中国游戏公司37.com进军西方海外市场
查看>>
编程异常——假设你报createSQLQuery is not valid without active transaction,...
查看>>
ios新开发语言swift 新手教程
查看>>
有引用外部jar包时(J2SE)生成jar文件
查看>>
写接口请求类型为get或post的时,参数定义的几种方式,如何用注解(原创)--雷锋...
查看>>
什么是 开发环境、测试环境、生产环境、UAT环境、仿真环境
查看>>
科研需要兴趣和自信
查看>>
iOS Development
查看>>
mysql
查看>>
1分钟搞定Android开发智能提示问题xml文件一并搞定
查看>>
4分钟学会网页样式
查看>>
Java核心技术点之注解
查看>>
【PHP】array_column函数
查看>>
LayUI--表格 + 分页
查看>>
【OpenJ_Bailian - 2287】Tian Ji -- The Horse Racing (贪心)
查看>>