相同键的Ada hashmap值是否会被覆盖

时间:2018-09-24 00:48:09

标签: hashmap ada

在Ada中,如果我将插入命令与哈希映射中已经存在的键一起使用,它将仅更新该键存储的值吗? 这是Hashed_Maps软件包的Ada 2005规范: http://www.adaic.org/resources/add_content/standards/05rm/html/RM-A-18-5.html
谢谢

2 个答案:

答案 0 :(得分:8)

This answer是正确的,但这确实取决于您使用哪个Insert。有几个(ARM A.18.4(44ff));如果您使用the simple one

procedure Insert (Container : in out Map;
                  Key       : in     Key_Type;
                  New_Item  : in     Element_Type);

然后

  

按照五参数“插入”将Key和New_Item插入到Container中,不同之处在于如果映射中已经存在具有与Key等效的键的节点,则传播Constraint_Error 。 >

答案 1 :(得分:7)

在阅读Hashed_Maps提供的Insert过程时,还请参考所有Maps通用的子程序文档。特别注意out类型的Boolean参数:

  

如果找到匹配项,则将Inserted设置为False,并且Position用匹配键指定元素。否则,Insert分配一个新节点,将其初始化为KeyNew_Item,然后将其添加到ContainerInserted设置为True,而Position指定新插入的节点。

Insert之后,现有键/项对将保持不变,但是如果您的用例需要,您可以Replace相应键的项,例如增加遇到特定密钥的次数。

在与此相关的example中,过程Read_Dictionary将每个词典单词(关键字)映射到单词集(项目)。在循环中,该过程检查Inserted以确定是否应更新新集合或现有集合。

Word_Map.Insert(Sorted, Position, Inserted);
if Inserted then
   Set := new ACOS.Set;
   Word_Map.Replace_Element(Position, Set);
else
   Set := ACHM.Element(Position);
end if;
Set.Insert(Word);