混乱的hashmap和hashtable之间的差异

时间:2013-05-18 03:30:56

标签: c++ data-structures hashmap hashtable binary-search-tree

我有一个困惑:

我在很多帖子中都读到哈希地图是作为二进制搜索树实现的,这使得各种操作对数顺序的时间复杂度。

另一方面,

Hashtables 提供常量时间提取。

  

但是,正如我在this帖子中所读到的那样,在两个数据结构中检索/搜索元素的复杂性方面没有提供任何差异。

所以,这是我的问题 -

由于散列表保证提供恒定的搜索时间复杂度,因此它们的实现必须与散列映射的实现不同。 那么,为什么有人会使用哈希映射,如果他们不提供恒定的时间搜索。另外,为什么首先将它们实现为二叉搜索树?

我知道哈希映射以排序的形式存储密钥,并通过映射提供迭代。但是,也可以在哈希表中提供相同的内容。

1 个答案:

答案 0 :(得分:7)

您的困惑源于以下内容:

  

哈希映射实现为二叉搜索树

他们不是。没有明智的命名约定会使用术语“hashmap”来描述基于树的结构。

例如,在Java中,HashMap基于哈希表,TreeMap基于树。

C ++在其标准容器的命名中既不使用“hash”也不使用“tree”。与HashMapTreeMap相对应的两个容器是std::unordered_mapstd::map