在Ada中,如果我将插入命令与哈希映射中已经存在的键一起使用,它将仅更新该键存储的值吗?
这是Hashed_Maps
软件包的Ada 2005规范:
http://www.adaic.org/resources/add_content/standards/05rm/html/RM-A-18-5.html
谢谢
答案 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
分配一个新节点,将其初始化为Key
和New_Item
,然后将其添加到Container
;Inserted
设置为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);