STL中HashTable HashMap HashSet Set Map MultiSet MultiMap总结
来源:互联网 发布:unity3d 7.1安装教程 编辑:程序博客网 时间:2024/05/17 08:55
1.hashtable
hash_set、hash_map、hash_multiset、hash_multimap四个关联容器都是以hashtable为底层实现方法(技巧)。应该说,上述的四个关联式容器提供的api都是对hashtable原生态api的高层封装,因为hashtable本身都提供了它们所需要的基础api。主要思想是通过hash函数,把对象映射到一个较小的容器里面,并且保证时间复杂度。映射到较小容器很可能出现碰撞问题,解决的方法常见的有:线性探测,二次探测,开链法。STL利用vector来当容器,采用开链法来解决冲突,从而实现hashtable.hashtable只能处理char,int,short等类型,不能处理string,double,float类型,想要处理的话必须自己加hash function。
std::hashtable<A,B> obj;
2.set是种随机存储的关联式容器,其关键词(key)和元素(value)是同一个值。set之中所有元素互不相同。set是通过红黑树来实现的,是默认排序的。
std::set<int> s1;
std::set<int,greater<int>> s2;//默认小于比较器
std::set<int> s3(s1);
std::set<int> s4(s1.begin(),s1.end());//迭代器可以用指针代替
3.map是提供对象间一一映射关系的一种容器,它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。
3.hashmap:提供对象间一一映射,底层由hashtable提供。
4.hashset:提供集合,底层由hashtable提供。与set相比较而言,在于数据量大时查询效率更高。
c++没有hashset,hashtable,hashmap,需要通过一定方式去引用外部库。
5.multiset,multimap:提供一key'对应多个对象,比如电话薄中一个用户可以有多个电话号码。
std::mutiset<string> s1;
std::multimap<string,string> m1;
容器
特性
所在头文件
向量vector
可以用常数时间访问和修改任意元素,在序列尾部进行插入和删除时,具有常数时间复杂度,对任意项的插入和删除就有的时间复杂度与到末尾的距离成正比,尤其对向量头的添加和删除的代价是惊人的高的
<vector>
双端队列deque
基本上与向量相同,唯一的不同是,其在序列头部插入和删除操作也具有常量时间复杂度
<deque>
表list
对任意元素的访问与对两端的距离成正比,但对某个位置上插入和删除一个项的花费为常数时间。
<list>
队列queue
插入只可以在尾部进行,删除、检索和修改只允许从头部进行。按照先进先出的原则。
<queue>
堆栈stack
堆栈是项的有限序列,并满足序列中被删除、检索和修改的项只能是最近插入序列的项。即按照后进先出的原则
<stack>
集合set
由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序,具有快速查找的功能。但是它是以牺牲插入删除操作的效率为代价的
<set>
多重集合multiset
和集合基本相同,但可以支持重复元素具有快速查找能力
<set>
映射map
由{键,值}对组成的集合,以某种作用于键对上的谓词排列。具有快速查找能力
<map>
多重集合multimap
比起映射,一个键可以对应多了值。具有快速查找能力
<map>
http://blog.csdn.net/byxdaz/article/details/4633826
http://vipjy2008.blog.163.com/blog/static/3720876720139281936791/
不错的总结
- STL中HashTable HashMap HashSet Set Map MultiSet MultiMap总结
- hashtable,hashset,hashmap,set,map,multimap,multiset
- STL中hashtable,hashset,hashmap,set,map,multiset和multimap的区别
- STL中hashtable,hashset,hashmap,set,map,multiset和multimap的区别
- STL关联容器MAP、SET与multimap、multiset与hashmap、hashset的区别
- STL总结之set/multiset和map/multimap
- STL模板总结归纳(set,multiset和map,multimap)
- Map HashMap HashTable Set HashSet
- STL map, multimap, set, multiset 函数介绍
- STL容器 set、 multiset、map、multimap
- C++ STL之 map\set\multimap\multiset
- 关于set/multiset和map/multimap总结
- map,multimap,set,multiset
- set,map,multiset,multimap
- map,multimap,set,multiset
- map/multimap/set/multiset
- 【STL】STL中红黑树的应用set、multiset、map、multimap
- List、Map、Set、HashMap、HashSet、Hashtable
- Unity3d 框移动而物体不移动
- 获取一个表的所有字段
- 比较好的一段打开位图的函数
- 代码面试最常用的10大算法
- Flex日历中文显示
- STL中HashTable HashMap HashSet Set Map MultiSet MultiMap总结
- 让Dreamweaver支持cshtml (MVC Razor环境)
- 宏网推广引擎深度解析
- Linux线程的读写锁
- 多用GCD,少用performSelector
- STL容器:set/map/multiset/multimap 与hash_set/hash_map/hash_multiset/hash_multimap
- debug程序调试
- 手机摄像头采集图像格式
- SCRUM房地产公司