Map 在给定绑定的映射中查找密钥的简单方法,Ocaml

Map 在给定绑定的映射中查找密钥的简单方法,Ocaml,map,ocaml,Map,Ocaml,我对Ocaml中的Map模块不是很熟悉 我有一个简单的映射m:string map.Make(Int).t从Int到string,我知道每个绑定(:string)都是唯一的。我想写一个函数find\u from\u string\u to\u int:string->string Map.Make(int).t->int,有人能帮忙吗?多谢各位 如果这是一个不常见的操作,最简单的方法是折叠映射的所有(键、值)绑定SMap.fold: # module SMap = Map.Make(String

我对Ocaml中的Map模块不是很熟悉


我有一个简单的映射
m:string map.Make(Int).t
Int
string
,我知道每个绑定(
:string
)都是唯一的。我想写一个函数
find\u from\u string\u to\u int:string->string Map.Make(int).t->int
,有人能帮忙吗?多谢各位

如果这是一个不常见的操作,最简单的方法是折叠映射的所有(键、值)绑定
SMap.fold

# module SMap = Map.Make(String);;
# let reverse v t =
  SMap.fold (fun k v' acc -> if v = v' then Some k else acc) t None;;
val reverse : 'a -> 'a SMap.t -> SMap.key option = <fun>
#模块SMap=Map.Make(字符串);;
#让我们倒v t=
SMap.fold(有趣的k v’acc->如果v=v’,那么一些k其他acc)t None;;
val反向:“a->”a SMap.t->SMap.key选项=
如果这是一个常见的操作,那么您需要的是一个双向映射(一个可以在两个“方向”上查询的映射)。最简单的方法是随身携带一对地图:
int IMap.t*string SMap.t
(两个方向的访问都是对数的,而上面的
反向
在地图大小上是线性的)。您也可以实现专用的数据结构,但这可能不值得增加复杂性

PS:
reverse
可以进行优化,以便在找到值时尽早退出迭代,但如果这是一个不常见的操作,那么它其实并不重要