首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++中的map与hash_map

C++中的map与hash_map
EN

Stack Overflow用户
提问于 2010-02-03 10:12:23
回答 5查看 158.8K关注 0票数 121

我有个问题要问C++的hash_mapmap。我知道map是用标准语言编写的,但是hash_map不是标准。这两者有什么不同?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-03 10:18:15

它们以非常不同的方式实现。

hash_map ( TR1和Boost中的unordered_map;改为使用它们)使用哈希表,其中键被散列到表中的一个槽,值存储在与该键绑定的列表中。

map被实现为平衡的二进制搜索树(通常是红/黑树)。

对于访问集合的已知元素,unordered_map应该会提供稍微好一点的性能,但map将具有其他有用的特征(例如,它以排序的顺序存储,这允许从头到尾进行遍历)。在insert和delete方面,unordered_mapmap更快。

票数 137
EN

Stack Overflow用户

发布于 2010-02-03 10:24:35

hash_map是许多库实现提供的通用扩展。这正是将其作为TR1的一部分添加到C++标准中时将其重命名为unordered_map的原因。map通常使用像红黑树这样的平衡二叉树来实现(当然,实现方式各不相同)。hash_mapunordered_map通常使用哈希表实现。因此,该顺序不会被维持。unordered_map插入/删除/查询将是O(1) (恒定时间),其中map将是O(log ),其中n是数据结构中的项数。所以unordered_map更快,如果你不关心项目的顺序,应该比map更好。有时,您希望维护顺序(按键排序),为此,map将是一个选择。

票数 35
EN

Stack Overflow用户

发布于 2010-02-03 10:17:47

C++规范并没有明确说明您必须为STL容器使用什么算法。然而,它确实对它们的性能施加了某些约束,这排除了对map和其他关联容器使用哈希表的可能性。(它们通常是用红/黑树实现的。)这些约束要求这些容器比哈希表提供更好的最坏情况下的性能。

然而,许多人确实想要哈希表,所以基于哈希的STL关联容器多年来一直是一个常见的扩展。因此,他们在C++标准的较新版本中添加了unordered_map等。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2189189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档