gpt4 book ai didi

dictionary - Ada 中是否预先实现了 "dictionary"类型?以及如何使用它?

转载 作者:行者123 更新时间:2023-12-03 15:46:52 28 4
gpt4 key购买 nike

我试图找出标准 Ada 库是否配备了“字典”类型(我的意思是:一种以 <key, value> 格式存储值的数据结构,我可以从中检索 value 使用相应的唯一 key)。

这样的数据结构存在吗?如果是这样,有人可以提供一个如何填充和查询它的工作示例吗?

我尝试在谷歌上搜索,但它只是从定义“ada”这个词的在线词典中找到数百个结果。

最佳答案

字典的另一个词是 map ; Map 提供了从键到值的映射。

Ada.Containers有两种不同的 Map,Hashed 和 Ordered。对于 Hashed 映射,您在 Key 类型上提供一个散列函数,而对于 Ordered 映射,您提供一个比较函数“<”来定义顺序。

此外,这些种类中的每一种都有两种形式,确定的和不确定的。从广义上讲,确定类型是那些编译器知道该类型对象的大小的那些类型,以便它可以在容器中为要直接存储的包含对象保留正确的空间量 - 例如 Integer - 而对于不确定类型,例如作为字符串,运行时大小可以随实例而变化,因此容器必须在幕后使用动态分配。

我需要计算输入命名子程序的次数,并以此为基础:

package String_To_Count_Maps
is new Ada.Containers.Indefinite_Hashed_Maps
(Element_Type => Natural,
Key_Type => String,
Hash => Ada.Strings.Hash_Case_Insensitive,
Equivalent_Keys => Ada.Strings.Equal_Case_Insensitive);

(不需要为 Natural 提供相等操作,因为标准“=”是默认的)。

我声明 map :
Saved_Entries : String_To_Count_Maps.Map;

然后我可以增加 For_Subprogram_Named 的当前计数经过
...
C : constant String_To_Count_Maps.Cursor :=
     Saved_Entries.Find (For_Subprogram_Named);
   use type String_To_Count_Maps.Cursor;
begin
   if C = String_To_Count_Maps.No_Element then
      Saved_Entries.Insert (For_Subprogram_Named, 1);
   else
      Saved_Entries.Replace_Element
        (Position => C,
         New_Item => String_To_Count_Maps.Element (C) + 1);  -- see (a)
   end if;

提取当前计数的代码也同样考虑了还没有任何“增量”的情况。

(a) 你会注意到,因为 Map是标记类型和 Cursor不是,我可以说 Saved_Entries.Replace_Element (...) ,但不是 C.Element + 1 .这很烦人,但有人告诉我有原因。

关于dictionary - Ada 中是否预先实现了 "dictionary"类型?以及如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24917190/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com