作者:生活趣图分享 | 来源:互联网 | 2022-12-04 08:55
在Ada中,如果我使用带有哈希映射中已存在的键的insert命令,它是否只更新存储在该键中的值?以下是该Hashed_Maps
软件包的Ada 2005规范:http:
//www.adaic.org/resources/add_content/standards/05rm/html/RM-A-18-5.html
谢谢
1> Simon Wright..:
这个答案是正确的,但它确实取决于Insert
你使用的是什么.有几个(ARM A.18.4(44ff)); 如果你使用简单的
procedure Insert (Container : in out Map;
Key : in Key_Type;
New_Item : in Element_Type);
然后呢
根据五参数Insert将Key和New_Item插入Container,区别在于如果具有等效于Key的键的节点已经在Map中,则传播Constraint_Error.
2> trashgod..:
在阅读所Insert
提供的程序时Hashed_Maps
,还请参阅所有人共同的子程序文档Maps
.特别注意out
类型的参数Boolean
:
如果找到匹配项,Inserted
则设置为False
并Position
使用匹配键指定元素.否则,Insert
分配一个新节点,将其初始化为Key
和New_Item
,并将其添加到Container
; Inserted
设置为True
并Position
指定新插入的节点.
之后Insert
,现有的键/项对将保持不变,但是Replace
如果您的用例需要,您可以使用相应的键项,例如增加特定键遇到的次数.
在该相关示例中,该过程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);