set/multiset/map/multimap/unorder_set/unorder_map
来源:互联网 发布:剑灵捏人完美女神数据 编辑:程序博客网 时间:2024/06/05 06:02
STL容器大致分为两类:
序列式容器—–通过元素在容器中的位置顺序存储和访问元素。
关联式容器—–通过键(key)存储和读取元素的。
标准的STL序列容器包括:vector、list、deque、heap(算法呈现)、stack(适配器)、queue(适配器)、priority_queue(适配器)。
标准的STL关联式容器包括:set、multiset、map、multimap。
非标准的关联式容器:hash_set、hash_multiset、hash_map、hash_multimap
本节主要谈一下关联容器
STL标准库中的关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也称RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,一颗有n个内结点的红黑树的高度至多为2lg(n+1),它能保证在最坏情况下,基本的动态集合操作时间为O(lgn)。所以被STL选择作为了关联容器的内部结构。在红黑树,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值.
注:红黑树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。
set/multiset不区分键值和实值,其键值就是实值,会根据待定的排序准则,自动将元素排序。两者唯一的不同在于前者不允许元素重复(底层调rb_tree::insert_unique()),而后者允许(底层调用rb_tree::insert_equal())。
和set相比,map/multimap同时拥有实值(value)和键值(key),其每一个元素都是pair<key,value>
,pair的第一个元素是键值,第二个元素是实值。map和multimap的唯一区别在于,map不允许两个元素拥有相同的键值(底层调rb_tree::insert_unique()),而multimap允许存在重复的键值(底层调用rb_tree::insert_equal())。
hash_set、hash_map、hash_multiset、hash_multimap这些非标准的关联容器是基于hashtable的set、map,不具有元素自动排序特性,在C++11中改名为unorder_set,unorder_map,unorder_multiset,unorder_multimap。
- set/multiset/map/multimap/unorder_set/unorder_map
- map/set/multi_map/multi_set/unorder_map/unorder_set总结
- map/set/multi_map/multi_set/unorder_map/unorder_set总结
- map,multimap,set,multiset
- set,map,multiset,multimap
- map,multimap,set,multiset
- map/multimap/set/multiset
- map、multimap、set、multiset容器
- map、set、multimap、multiset(转)
- STL map, multimap, set, multiset 函数介绍
- 关联容器(map、set、multimap、multiset)
- hashtable,hashset,hashmap,set,map,multimap,multiset
- Set 和 Multiset , Map 和 Multimap
- map、set、multiset、multimap的有序性
- C++之map-set-multimap-multiset
- map,multimap,unordered_map,set,multiset,unordered_set
- map , multimap , set , multiset的用法
- 关联容器 map/set/multimap/multiset
- 数组删除和数组去重
- 在linux下如何显示隐藏文件
- 微信的全局接口使用凭证access_token和网页授权临时access_token
- spring MVC 复杂json传值
- qtcreator常用快捷键
- set/multiset/map/multimap/unorder_set/unorder_map
- VMware 下虚拟网卡与主机网卡之间的关系
- NumPy的tile函数
- js中闭包理解
- Python学习之旅-2
- syslog函数解析[转载]
- struts2学习指南----目录
- 自己在Qt上做的辣鸡计算器
- 使用WindowsAPI获取录音音频的方法