Language agnostic 这是哪种数据结构?

Language agnostic 这是哪种数据结构?,language-agnostic,data-structures,Language Agnostic,Data Structures,具有以下操作的数据结构(如果存在)的名称是什么 您可以插入一个元素并获得一个键 可以通过元素的键检索元素 听起来像是一个哈希表/字典,尽管键是已知的而不是给定的。听起来像是它同时适用于Map和hash 不过,为了进一步识别元素,您必须对元素插入更加具体。听起来像是一本字典。 在哈希集中,元素表充当键,使用从元素集到自然数的哈希函数。 字典的工作原理与此类似,它对键使用哈希集,表中的每个条目都指向一个值 我不知道有哪种ADT可以插入一个元素并返回一个键…这是(非常接近)一个符号表,在Lisp意义

具有以下操作的数据结构(如果存在)的名称是什么

  • 您可以插入一个元素并获得一个键
  • 可以通过元素的键检索元素

听起来像是一个哈希表/字典,尽管键是已知的而不是给定的。

听起来像是它同时适用于Map和hash

不过,为了进一步识别元素,您必须对元素插入更加具体。

听起来像是一本字典。 在哈希集中,元素表充当键,使用从元素集到自然数的哈希函数。 字典的工作原理与此类似,它对键使用哈希集,表中的每个条目都指向一个值

我不知道有哪种ADT可以插入一个元素并返回一个键…

这是(非常接近)一个符号表,在Lisp意义上(注意短语“符号表”也可以指定相关但不同的数据结构)。符号表是从称为符号的键到称为绑定(或插槽或其他术语)的值的关联

注册新密钥的操作称为
gensym
。Lisp符号始终具有唯一的名称,即字符串
gensym
返回任何符号都不使用的名称。Lisp还支持按名称查找符号:
intern
返回给定名称的符号,如果不存在,则创建符号;一些实现提供了
intern soft
,以避免在没有该名称的符号时创建符号。给定一个符号,您可以使用
符号值
检索相关值

如果你不懂Lisp,就把符号当作变量
gensym
创建一个新变量,
symbol value
返回由引用指定的变量值。这些操作在编写Lisp非常支持的宏(元编程)时特别有用。现代Lisp实现有“不相关”的符号,即不在任何表中的符号,这使事情变得更干净。这与您心目中的数据结构无关(不感兴趣的符号可能是数据结构中不存在的东西)

符号表很容易在映射(字典)接口上实现(通常使用哈希表或平衡树实现)。Gensym需要找到一个新的密钥,创建它并返回它。查找是通常的地图查找。如果所有密钥都是由gensym创建的,则密钥类型可以保持抽象。

内存分配器


您分配(插入)一个元素,并给定一个键(指针、引用等),您可以通过指针引用检索(访问)该元素。

我不确定它叫什么,但它是在版本控制系统中实现的。例如,Git存储有这样的数据类型:在其中存储一个blob并获取一个键,这是它的SHA-1散列。稍后,您可以使用该键检索blob

我认为一些文件系统也可以这样工作


我可以称之为“匿名值存储”。

在“企业存储解决方案”(或其他)的空间中,这通常被称为内容寻址存储,假设密钥本身是从您放入其中的内容派生的(例如,加密散列),但在大多数情况下,这只是一个实现细节。

我认为这是一个可以在Google Storage上找到的大表示例。我们可以从key-easy中检索元素。

听起来像是一个可扩展的数组(std::vector)。在插入时,将项目数作为ID返回,就完成了。满足要求并提供简单的存储。

它可以是哈希表的实现。

这可能符合一些结构的定义和功能,但通常指的是哈希表或映射。

当你说
ADT
时,你的确切意思是什么?我假设为抽象数据类型,但需要确认。@Oded:ADT->Abstract DataType@Nerian,如果我错了,请纠正我,但在您插入特定密钥的哈希中,在此ADT中,密钥在存储时返回。它可以是任何内容,除非您提到预期的时间复杂性数据结构是存储和组织数据的一种方式。您所描述的是一个接口,用于访问由某些数据结构存储和组织的数据。接口与数据结构不关联,即可以使用未绑定数量的数据结构来实现接口。是否有ADT提供密钥?不确定该密钥有多大用处,您将在何处存储用于以后检索项目的密钥?它很有用;这与url缩短器和malloc(某种程度上)使用的模型相同。这可能是最准确的答案。当键和值都需要控制时,哈希表等非常有用。回答得很好。无法击败插入和检索。所谓的句柄(文件/流/套接字、窗口、内存块等)。它被称为“内容可寻址内存”,意思是内容本身决定了内容的索引。我认为这是OP要求的子集,但可能是最常用的子集。