STL之关联容器的映射底层
STL的关联容器有set, map, multiset, multimap.用于实现它们的底层容器有划入标准的rb_tree和待增加标准的hashtable.
底层容器rb_tree为上层容器提供了一种有序的服务.关键步骤时间复杂度为O(lgN);
底层容器hashtable为上层容器提供的是无序的服务,但其关键步骤的时间复杂度为O(1).
那么上层容器是怎么映射究竟层容器中去的呢?以下以set和map为例,说明它们是怎样映射到rb_tree和hashtable的.
1 rb_tree模板头
对于rb_tree的节点,事实上仅仅是保存了Value对象,并没有直接保存Key.
也就是说rb_tree仅仅能直接看到Value,而看不到Key.因此要为rb_tree提供一个间接获取Key的方法.
即KeyOfValue, 它负责从Value获取相应的Key, 用于rb_tree中须要用到key值(比較)的地方.
2 hashtable模板头
与rb_tre一样, hashtable也是如此.它通过ExtractKey来提取Value相应的Key.
3 set
3.1 set的特点
键值就是实值,即key = value
3.2 set到rb_tree映射
1) set模板头
2) 到rb_tree的映射
key_type 与 value_type都是set的 Key.
3.3 set到hash_table的映射
1) set模板
2) 到hashtable的映射
4 map
4.1 map特点
通常键值与实值不等,即 key != value,为用户提供了一种key到value映射服务.
4.2 map到rb_tree映射
4.3 map到hashtable映射
在hashtable中看到的仅仅是pai<const Key, T>.
5 总结
5.1 rb_tree
value--(KeyOfValue)-->key---(Campare)->插入或删除
5.2 hashtable
value--(ExtractKey)--> key --(HashFcn)--> hashcode--(%n)--> bkt_num-->插入或删除.
STL之关联容器的映射底层的更多相关文章
- ###STL学习--关联容器
		点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭 ... 
- STL之关联容器---set, mutilset, map, mutilmap
		STL的容器分为序列容器和关联容器.它们所表达的数据结构各有不同: 序列容器:vector(变长数组), list(链表), queue(队列), heap(堆算法)等 关联容器:set/mutils ... 
- STL之关联容器
		关联容器包含map.set.multimap.multiset. 关联容器的特点是明显的,相对于顺序容器,有如下特点: 1.其内部是采用非线性的二叉树结构,具体的说是红黑树的结构原理实现的. 2.se ... 
- 【STL】关联容器 — hash_set
		容器hash_set是以hash table为底层机制的,差点儿所有的操作都是转调用hash table提供的接口.因为插入无法存储同样的键值,所以hash_set的插入操作所有都使用hash tab ... 
- 【STL】关联容器 — hashtable
		C++ 11哈希表已被列入标准列.hashtable这是hash_set.hash_map.hash_multiset.hash_multimap的底层机制.即这四种容器中都包括一个hashtable ... 
- STL - 常用关联容器代码 - set & multiset
		代码如下: /* 5. set & multiset */ set<string> cities{ "Braunschweig", "Hanover& ... 
- cb22a_c++_标准模板库_STL_map_multimap红黑树(数据结构)关联容器
		cb22a_c++_标准模板库_STL_map_multimap红黑树(数据结构)关联容器map(映射,key不能重复,一对一对的,value_type(1, "one")),mu ... 
- STL_关联容器 VS C++ hashmap
		红黑树和哈希表区别: http://m.blog.csdn.net/article/details?id=52133283 关于STL中关联容器的几个问题: (1)为何map和set的插入删除效率比用 ... 
- STL 笔记(二) 关联容器 map、set、multimap 和 multimap
		STL 关联容器简单介绍 关联容器即 key-value 键值对容器,依靠 key 来存储和读取元素. 在 STL 中,有四种关联容器,各自是: map 键值对 key-value 存储,key 不可 ... 
随机推荐
- 【译】x86程序员手册39-10.3切换到保护模式
			10.3 Switching to Protected Mode 切换到保护模式 Setting the PE bit of the MSW in CR0 causes the 80386 to b ... 
- oracle 表之间的连接
			排序 - - 合并连接(Sort Merge Join, SMJ): a) 对于非等值连接,这种连接方式的效率是比较高的. b) 如果在关联的列上都有索引,效果更好. c) 对于将2个较大的row s ... 
- Zend Studio 离线汉化包下载方法
			进入eclipse官网 语言包位置 http://www.eclipse.org/babel/downloads.php 
- winpcap编程设置过滤器之指定获取某个网站的数据
			下面,我将以 乱世隋唐页游 为例,通过编码获取这里面的数据. 游戏图: 我是乱世隋唐的网址是:www.917st.com 这个是官网网址的服务器地址. 42.62.0.14 我玩的游戏服是84区.网 ... 
- 指针函数(Pointer Function)和函数指针(Pointer to Function或Function Pointer)
			一.指针函数 1.解释:指针函数很好理解:简单来说,就是一个返回指针的函数,本质是一个函数.如: int fun(int x,int y); //这是一个普通函数的声明,返回值是一个int类型, ... 
- win10下硬盘安装CentOS7
			安装环境: 1.系统:Windows 10 2.硬盘:SSD(已装好Win 10) + HHD(用来装CentOS 7) 准备工作: 1.DiskGenius(分区工具):用来给硬盘做分区: 2.系统 ... 
- Win7解决无法在资源管理器中连接FTP问题
			需要连接FTP站点,但是又不想使用任何工具,使用电脑自带的资源管理器实现连接. 一般来说是能正常连接没有问题的,但是存在个别电脑不行. 试过好多办法不行,如下办法方法管用. 复制以下代码,本地保存为R ... 
- 51中xdata,idata,data,pdata的区别
			51系列中data,idata,xdata,pdata的区别 data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小. idata: 固定指前面0 ... 
- 解决idea创建ssm项目找不到mybatis的mapper的xml文件问题
			http://blog.csdn.net/v19freedom/article/details/69855302 后来上网搜了下,别人给出的答复 idea在build工程的时候 遇到maven项目 使 ... 
- Python数组列表(List)
			Python数组列表 数组是一种有序的集合,可以随时添加和删除其中的元素. 一.数组定义: 数组是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 数组的数据项不需要具有相同的类 ... 
