在SML中使用二进制映射数据结构的问题

问题描述 投票:-1回答:1

我想在SML中创建一个带有多个节点的有序映射。直到现在我才发现,存在于此:https://www.smlnj.org/doc/smlnj-lib/Manual/binary-map-fn.html。所以,我正在尝试这样的事情:

structure S = BinaryMapFn(struct
    type ord_key = int
    val compare = Int.compare
  end);

然后,我试图插入例如2个节点,其值分别为0和键值1和2:

S.insert(S.empty,1,0);
S.insert(S.empty,2,0);

输出:val it = T {cnt = 1,key = 2,left = E,right = E,value = 0}:int S.map

S.numItems(it);

输出:val it = 1:int

所以,我假设numItems的输出它创建了2个二进制映射,每个映射有1个节点,而不是一个。我很确定我错过了一些东西,但没有足够的材料和与该结构有关的例子。

sml smlnj
1个回答
2
投票

要看的是insert函数的类型,以及BinaryMapFn符合的签名empty中的ORD_MAP

val empty : 'a map 
val insert : ('a map * Key.ord_key * 'a) -> 'a map 

因此,insert接受一个(fromMap,key,x)并返回一个新的map,其中包含fromMap的元素,其中添加了x / key以及以某种方式处理的重复键。

要获得具有2个元素的映射,而不是在两个调用中都使用S.empty,您需要将第一个调用的返回值作为参数传递给第二个。

注意:值得注意的是,smlnj-lib文档非常陈旧,过时,但我不知道更新的链接,所以最好咨询源代码。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.