[CareerCup] 13.2 Compare Hash Table and STL Map 比较哈希表和Map

13.2 Compare and contrast a hash table and an STL map. How is a hash table implemented? If the number of inputs is small, which data structure options can be used instead of a hash table?

这道题让我们比较哈希表和STL中的map数据结构,在遇到这道题之前,我一直以为map就是c++中的哈希表呢,原来是不同的啊--!!!

哈希表是通过一个链表数组来实现的,链表中的每个节点包含了关键值key和数值value。数据不是有序存储的,是通过一个哈希函数来计算将要存进的位置index,查找或插入数据的时间复杂度是常数级的O(1),这简直碉堡了。在哈希表中,我们要解决潜在的冲突问题,即两组数据要存进同一个位置,我们可以用链表来将相同位置的数据链起立,铁索连环啊~

而Map是通过在二叉树中基于键值key插入键值/数值对来实现的,无需处理冲突。

对于输入数据比较小的情况,我们也可以用Map或者是二叉树来实现,虽然时间复杂度是O(lgn),但是由于输入数据小,其实也没啥太大差别。

时间: 2024-12-02 13:44:32

[CareerCup] 13.2 Compare Hash Table and STL Map 比较哈希表和Map的相关文章

C++ STL中的哈希表 hash_map

在定义hash_map容器的时候,不仅需要指定键和值的类型,还需要指定hash函数和相等函数 (一)hash_map 的hash函数 hash< int>到底是什么样子?看看源码: struct hash<int> { size_t operator()(int __x) const { return __x; } }; 原来是个函数对象.在SGI STL中,提供了以下hash函数: struct hash<char*> struct hash<const cha

PHP内核探索之变量(3)- hash table

在PHP中,除了zval, 另一个比较重要的数据结构非hash table莫属,例如我们最常见的数组,在底层便是hash table.除了数组,在线程安全(TSRM).GC.资源管理.Global变量.ini配置管理中,几乎都有Hash table的踪迹(上一次我们也提到,符号表也是使用Hash table实现的).那么,在PHP中,这种数据有什么特殊之处,结构是怎么实现的? 带着这些问题,我们开始本次的内核探索之旅. 本文主要内容: Hash table的基本介绍 PHP底层Hash tabl

哈希表(hash table)基础概念

哈希是什么 引入:我们在学习数组的时候,使用数组元素的下标值即可访问到该元素,所花费的时间是O(1),与数组元素的个数n没有关系,这就是哈希方法的核心思想. 哈希方法:以关键值K为自变量,通过一定的函数关系h(K)(哈希函数)计算出对应的函数值,把这个值解释为结点的存储地址,将结点的关键码(key)和属性数据(value)一起存入此存储单元中.检索时,用同样的函数计算出地址,找到对应的数据. 哈希表:按哈希存储方式构造的存储结构称为哈希表(hash table) 举例:已知线性表关键码值集合为S

哈希表(hash)详解

 哈希表结构讲解: 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫做散列表. 记录的存储位置 = function(关键字) 这里的对应关系function称为散列函数,又称为哈希(Hash函数),采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table). 哈希表hashta

用c++封装一个Hash Table,并与STL map 进行操作性能上的比较

问题描述: 1.在计算机科学中,hash table 是一种常用的数据结构,它本质上是一种关联容器,它映射一个key 到value.它通过一个hash function把key映射成一个整数值,这个整数值对应存放value值的容器的下标. 2.它主要支持三种操作:插入key,value对(insert),查询(search)给定key, 删除key, value对(delete); 3.它三种操作的平均时间复杂度为O(1),最糟糕情况下的时间复杂度为O(n): 4.hash table要处理核心

stl源码分析之hash table

本文主要分析g++ stl中哈希表的实现方法.stl中,除了以红黑树为底层存储结构的map和set,还有用哈希表实现的hash_map和hash_set.map和set的查询时间是对数级的,而hash_map和hash_set更快,可以达到常数级,不过哈希表需要更多内存空间,属于以空间换时间的用法,而且选择一个好的哈希函数也不那么容易. 一. 哈希表基本概念 哈希表,又名散列表,是根据关键字直接访问内存的数据结构.通过哈希函数,将键值映射转换成数组中的位置,就可以在O(1)的时间内访问到数据.举

STL hash table, Unordered Contains

STL hash table, Unordered Contain   C++11加入使用hash table实现的Unordered Containers.容器中元素是不排序的,同时我们也不能指定某个元素的位置. 头文件:#include <unordered_set>   unordered_set; unordered_multiset;           #include <unordered_map> unordered_map; unordered_multimap;

散列表(hash table)&mdash;&mdash;算法导论(13)

1. 引言     许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表     在介绍散列表之前,我们前介绍直接寻址表.     当关键字的全域U(关键字的范围)比较小时,直接寻址是一种简单而有效的技术.我们假设某应用要用到一个动态集合,其中每个元素的关键字都是取自于全域U={0,1,-,m-1},其中m不是一个很大的数.另外,假设每个元素的关键字都不同.    为表示动

算法导论---------------散列表(hash table)

摘要: 本章介绍了散列表(hash table)的概念.散列函数的设计及散列冲突的处理.散列表类似与字典的目录,查找的元素都有一个key与之对应,在实践当中,散列技术的效率是很高的,合理的设计散函数和冲突处理方法,可以使得在散列表中查找一个元素的期望时间为O(1).散列表是普通数组概念的推广,在散列表中,不是直接把关键字用作数组下标,而是根据关键字通过散列函数计算出来的.书中介绍散列表非常注重推理和证明,看的时候迷迷糊糊的,再次证明了数学真的很重要.在STL中map容器的功能就是散列表的功能,但