这是哪种数据结构?

时间:2011-05-07 14:18:26

标签: language-agnostic data-structures

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

  • 您可以插入一个元素,然后给您一把钥匙。
  • 您可以按键检索元素。

11 个答案:

答案 0 :(得分:62)

内存分配器

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

答案 1 :(得分:10)

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

注册新密钥的操作称为gensym。 Lisp符号总是有一个唯一的名称,这是一个字符串; gensym返回任何符号都未使用的名称。 Lisp还支持按名称查找符号:intern返回给定名称的符号,如果不存在则创建符号;某些实现提供intern-soft以避免在没有该名称的情况下创建符号。给定一个符号,您可以使用symbol-value检索相关值。

如果您不了解Lisp,请将符号视为变量; gensym创建一个新变量,symbol-value返回由引用指定的变量的值。这些操作在编写很好的Lisp支持的宏(元编程)时特别有用。 Modern Lisp实现具有“uninterned”符号,即不在任何表中的符号,这使得事物更清晰。这与您想到的数据结构无关(未加工的符号将是您的数据结构中不存在的东西)。

符号表很容易在地图(字典)界面上实现(通常使用哈希表或平衡树实现)。 Gensym找到了一把新钥匙,创造并返回它。查找是通常的地图查找。如果你的所有密钥都是由gensym创建的,那么密钥类型可以保持抽象。

答案 2 :(得分:5)

我不确定它叫什么,但它是在版本控制系统中实现的。例如,Git存储具有以下数据类型:在其中存储blob并获取密钥,即SHA-1哈希。稍后,您可以使用该密钥检索blob。

我认为某些文件系统也可能以这种方式工作。

我可以称之为“匿名价值商店”。

答案 3 :(得分:4)

听起来像哈希表/字典,虽然密钥是已知的而不是给定的。

答案 4 :(得分:3)

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

答案 5 :(得分:1)

我认为这是Big Table示例,可以在Google Storage上找到。我们可以从key easy中检索元素。

答案 6 :(得分:1)

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

答案 7 :(得分:0)

听起来它有资格使用Map和Hash。

你必须对元素插入有更具体的了解,以便进一步识别它。

答案 8 :(得分:0)

听起来像字典。 在散列集中,元素表充当键,使用从元素集到自然数的散列函数。 字典的工作方式类似,通过使用键的哈希集,表中的每个条目都指向一个值。

我不知道任何一个ADT,其中一个元素插入一个元素然后取回一个键...

答案 9 :(得分:0)

它可能是哈希表的实现。

答案 10 :(得分:0)

这可能适合一些结构的定义和功能,但大多数通常是指哈希表或地图。