【发布时间】:2016-12-07 12:32:31
【问题描述】:
带有char-type keys 的地图的访问时间是否比normal arrays 快?
我认为这是真的原因是因为普通数组有integer-type indexing,而我想到的地图有char-type indexing。
整数是 4 字节,而字符只有 1 字节,因此有理由相信在给定 char 键处访问地图项比访问普通键更快给定整数索引处的数组项。换句话说,CPU 有更少的索引/键值字节来检查以确定数组中的哪个元素在内存中被引用。
【问题讨论】:
-
a) 不,假设使用字节索引比使用整数索引更快是不合理的(微基准待定) b) 首先如何实现映射?使用数组?
-
a) 我认为您混淆了您的术语。 b)据我所知,地图基本上是一个数组,因为它是索引项的列表。除了索引类型之外,唯一重要的是普通数组和 char 类型键控映射具有相同的内容类型(例如,int 数组的内容类型为 int)。如果我们假设 C++,我会使用无序映射。无论您使用哪种编程语言,都可以使用最快的地图类型。
-
我建议您阅读更多关于关联数组(映射)和直接寻址数组之间的区别,然后重新表述问题。
-
std::unordered_map 是一个哈希表,它显然会比普通数组慢,因为它的实现要复杂得多。数组访问只是一个乘法+加法+内存获取操作,CPU 的速度非常快。对于哈希表,您需要计算哈希值,查找哈希桶中的条目并比较键(当然,这取决于特定的实现)