dev*_*ium 168 language-agnostic dictionary key-value data-structures
我知道地图是一种将键映射到值的数据结构.字典不一样吗?地图和字典1有什么区别?
1.我不是在询问它们是如何在X或Y语言中定义的(这似乎是人们通常在这里提出的问题),我想知道它们在理论上的区别.
Blu*_*eft 236
同一件事的两个术语:
"Map"是正确的数学术语,但它被避免,因为它在函数式编程中具有独立的含义.
有些语言还使用其他术语(Javascript中的"Object",Ruby中的"Hash",Lua中的"Table"),但这些术语在编程中也有不同的含义,所以我会避免使用它们.
有关详细信息,请参见此处
Ton*_*roy 13
计算机科学术语总结:
一个字典是表示一组元素的数据结构,具有插入,缺失,和用于会员资格测试; 元素可能但不一定由不同的键和值部分组成
一个地图是关联的数据结构能够存储一组密钥,各自与一个(或有时多于一个-例如,C ++多重映射)关联值,具有的能力,以访问和擦除只给出密钥现有条目。
程序员在他们使用的特定语言或系统中看到了具有更具体含义的术语,因此回答这个问题很复杂,但该问题要求“理论上”进行与语言无关的比较,我认为这是计算科学术语中的意思.
牛津大学计算机科学词典列出了:
字典表示一组元素的任何数据结构,可以支持元素的插入和删除以及成员资格测试
计算机科学中的map概念基于数学语言术语mapping,牛津词典将其定义为:
映射将给定集合(域)的每个元素与第二个集合(范围)的一个或多个元素相关联的操作。
因此,使用上面严格的 Comp Sci 术语,如果接口恰好支持不是每个字典都需要的附加操作,则字典只是一个映射:
能够存储具有不同键和值组件的元素
仅给定密钥即可检索和擦除值的能力
一个微不足道的转折:
? 尽管如此,如果您在上面解释的严格的计算科学含义中使用字典,请不要指望您的听众最初会跟随您,或者在您分享和捍卫术语时会留下深刻印象。这个问题的其他答案(以及他们的赞成票)表明,在大多数程序员的经验中,“字典”与“地图”同义的可能性有多大。尝试选择更广泛和更明确地理解的术语:例如
map, multimap, unordered_map,unordered_multimapset, multiset, unordered_set,unordered_multisetstd::find您可以在擦除元素和测试的会员array,vector,list,deque等,但容器接口不直接支持,因为找到一个元素是O(N)壮观低效,在某些情况下,插入/擦除低效,并且支持这些操作会破坏容器所暗示的故意限制的 API - 例如deques 应该只支持前后的擦除/弹出而不是某些键。必须在代码中做更多的工作来编排搜索,这会温和地鼓励程序员切换到具有更高效搜索的容器数据结构。...稍后可能会添加其他语言/随时编辑...
我的2美分。
字典是Java中的抽象类,而Map是接口。因为Java不支持多重继承,所以如果一个类扩展了Dictionary,它就不能扩展任何其他类。
因此,引入了Map接口。
字典类已过时,首选使用Map。