I decide to write to my blogs in English. When I meet something hard to depict, I'll add some Chinese necessarily. The differences between these containers are : The keys of set and map are unique, but they could be multiple for multiset and multimap…
STL之map与pair与unordered_map常用函数详解 一.map的概述 map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 下面…
unordered_set unordered_set是以无特定顺序存储唯一元素的容器,并且允许根据它们的值快速检索单个元素,是一种K模型. 在unordered_set中,元素的值同时是它的key,它唯一地标识它.键值是不可变的,因unordered_set中的元素不能在容器中修改一次 ,但是可以插入和删除它们. 在内部,unordered_set中的元素不是按任何特定顺序排序的(无序),而是根据它们的哈希值组织成桶,以允许直接通过它们的值快速访问单个元素,时间复杂度可以达到O(1). uno…
layout: post title: 侯捷STL学习(十) date: 2017-07-23 tag: 侯捷STL --- 第二十三节 容器hashtable探索 hashtable冲突(碰撞)处理 rehash时,篮子扩充两倍,找到其附近的质数,重新计算元素位置 内部扩充的数据已经预定好,53->97->.... hashtable实现 iterator要实现当当前node链表结束,要能进入到下一个buckets hashtable使用 模板参数的形式 容器hashtable中hashfu…
在C++语法的学习过程中,我们已经对模板有了基本的了解.泛型编程就是以模板为工具的.泛化的编程思想.本篇文章介绍了一些在之前的文章中没有涉及到的一些模板知识.泛型编程知识和几种容器.关于模板的一些重复知识在这里就不再进行赘述. 一.关于模板的知识点补充   1. 函数模板的参数推导与显式指定 通常情况下,我们一般采用参数的自动推导方式去使用函数模板.在自动推导时,为了确保推导的正确性,C++不允许任何形式的隐式类型转换. 这个限制就导致了如下的情况: template <class T> in…
二叉搜索树具有对数时间的搜索复杂度,但是这样的复杂度是再输入数据有足够的随机性的假设上哈希表在插入删除搜索操作上也具有常数时间的表现,而且这种表现是以统计为基础,不需要依赖输入元素的随机性 hashtable提供对任何有名项的存取操作和删除操作,可以视为一种字典结构, 负载系数:元素个数除以表格大小,除非使用开链,负载系数永远在0,1之间 碰撞的解决方法: 线性探测:当hash function计算出某个元素的插入位置,而在该位置上的空间已经不可用时,循序往下寻找,如果到达尾端则绕到头部继续寻找…
C++ 11哈希表已被列入标准列.hashtable这是hash_set.hash_map.hash_multiset.hash_multimap的底层机制.即这四种容器中都包括一个hashtable. 解决碰撞问题的办法有很多,线性探測.二次探測.开链等等.SGI STL的hashtable採用的开链方法,每一个hash table中的元素用vector承载,每一个元素称为桶(bucket),一个桶指向一个存储了实际元素的链表(list),链表节点(node)结构例如以下: template…
本篇文章在上一篇文章的基础上进一步介绍一些常用的容器以及STL的一些深入知识. 一. Stack和Queue 栈和队列是非常常用的两种数据结构,由deque适配而来.关于数据结构的知识这里就不在介绍了,仅介绍STL中的成员方法. stack 的基本操作有:入栈,如例:s.push(x);出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素.访问栈顶,如例:s.top()判断栈空,如例:s.empty(),当栈空时,返回true.访问栈中的元素个数,如例:s.size().…
http://www.cplusplus.com/reference/unordered_set/…
hashtable(散列表)是一种数据结构,在元素的插入,删除,搜索操作上具有常数平均时间复杂度O(1); hashtable名词 散列函数:负责将某一元素映射为索引. 碰撞(collision):不同的元素被映射到相同的位置. 解决碰撞的方法:线性试探法,二次试探法,开链等. 负载系数:元素个数除以表格大小. 主集团:平均插入成本的增长幅度,远高于负载系数的成长幅度. 次集团:hashtable若采用二次探测,则若两个元素经hash function计算出来的位置相同,则插入时所试探的位置也相…