我一直在使用Ada.Containers.Indefinite_Hased_Maps来创建我自己的自定义散列映射,并且在我尝试使用向量作为元素类型之前它运行良好。以下是有问题的代码示例:
package String_Vectors is new Ada.Containers.Vectors(Element_Type => Unbounded_String, Index_Type => Natural);
subtype String_Vector is String_Vectors.Vector;
package Positive2StringVector_HashMaps is new Ada.Containers.Indefinite_Hashed_Maps --Compiler fails here
(Element_Type => String_Vector,
Key_Type => Positive,
Hash => Positive_Hash,
Equivalent_Keys => Positive_Equal);
基本上,我不能Positive2StringVector_HashMaps
打包,因为编译器提出了:
no visible subprogram matches the specification for "="
根据我的理解,它找不到String_Vector
的等号运算符,我是否正确?如果我是,实施它的正确方法是什么?如果我不是,我做错了什么?
答案 0 :(得分:4)
您无需实施
function “=“ (L, R : String_Vectors.Vector) return Boolean
你自己,因为String_Vectors
中已有一个;见ALRM A.18.2(12)。所以你写了
package Positive2StringVector_HashMaps is new Ada.Containers.Indefinite_Hashed_Maps
(Element_Type => String_Vector,
Key_Type => Positive,
Hash => Positive_Hash,
Equivalent_Keys => Positive_Equal,
“=“ => String_Vectors.”=");
顺便提一下,您是否有理由在Ada.Containers.Vectors
使用Unbounded_String
而不是Indefinite_Vectors
上使用String
? (想要改变包含字符串的长度将被视为一个好理由!)