Answers:
Hash
是一个名称很差的数据结构,程序员在其中将接口与实现混淆了(并且懒得写全名,即HashTable
求助于缩写Hash
)。
Dictionary
是接口的“正确”名称(= ADT),即将(通常是唯一的)键映射到(不一定是唯一的)值的关联容器。
哈希表是这种字典的一种可能的实现,它提供了很好的访问特性(就运行时而言),因此通常是默认实现。
这样的实现具有两个重要的属性:
(对于可散列的键,意味着我们可以从键中计算出一个数值,该数值随后将用作数组中的索引。)
存在字典数据结构的替代实现,这些实现对键施加排序 –这通常称为排序字典(通常以搜索树的形式实现,尽管还存在其他有效的实现)。
总结一下:字典是一种ADT,它将键映射到值。此ADT有几种可能的实现,其中哈希表是其中之一。Hash
是用词不当,但在上下文中等效于根据哈希表实现的字典。
Hash
用哈希表实现该类,因为Ruby 1.9 Hash
es保留了插入顺序,而哈希表却没有。因此,在Ruby 1.9中,该名称Hash
甚至不再反映实现。
字典是为用于快速查找/插入的任何数据结构实现提供的统称。这可以使用各种数据结构(例如哈希表,跳过列表,rb树等)来实现/实现。哈希表是一种特定的数据结构,可用于许多目的,包括实现字典。
unordered_map
展示自己在做什么而不是在做什么。