c++ 关联容器详解——从内部结构到应用
来源:互联网 发布:java if else同时执行 编辑:程序博客网 时间:2024/04/30 14:40
关联容器不同于顺序容器的是,顺序容器底层用数组实现,为线性结构,而关联容器在实现中,用到的非线性存储方式;顺序容器是通过元素在容器中的位置顺序存储和访问元素,而关联容器是通过键(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 容器则更适用于需要存储(乃至修改)每个键所关联的值的情况
- c++ 关联容器详解——从内部结构到应用
- 学习C++——关联容器
- 读书笔记(C++)——【关联容器】
- STL — 关联容器
- 《Docker——容器与容器云》:第一章 从容器到容器云
- 《C++Primer》读书笔记——第11章 关联容器
- C++primer 关联容器
- 《C++primer》关联容器
- C++MAP关联容器
- C++map关联容器
- 数据结构-关联容器(C++)
- C++----关联容器
- 关联容器(Java/C++)
- STL组件——容器(关联容器)
- 容器总结——关联式容器
- 关联容器——map
- 关联容器——map
- STL—— 关联容器
- ant学习笔记(六)ant编译web项目,并打成war包,同时加入数据库操作
- poj 1701 Dissatisfying Lift (枚举)
- 观察者模式
- 深入研究数据访问:什么是SQL注入
- 其他优化技巧
- c++ 关联容器详解——从内部结构到应用
- Java Map 按Key排序和按Value排序
- json数据格式
- Android中状态栏的隐藏
- How to select unique records by SQL
- Java List排序
- 托管代码
- 100个windows平台C++开发错误之二十
- 内核内存分配器(Kernel Memory Allocator, KMA)