HashMap*等效方法-can';t通过等效密钥进行更新

HashMap*等效方法-can';t通过等效密钥进行更新,map,rust,Map,Rust,当前Rust的std::collections::HashMap包含三种方法,find_equiv,包含_key_equiv和pop_equiv,这三种方法允许使用与键类型“等效”的某种类型查询映射。例如,可以通过映射中的&str键找到一个值,其中键是Strings,&strs“等效”于String 但是,没有允许使用“等效”键更新映射的方法。例如,没有像get_mut()这样的方法可以返回对所包含值的可变引用 有没有一个特别的原因使它不可能实现,或者这只是一个缺少的部分,还没有人添加?主要原因

当前Rust的
std::collections::HashMap
包含三种方法,
find_equiv
包含_key_equiv
pop_equiv
,这三种方法允许使用与键类型“等效”的某种类型查询映射。例如,可以通过映射中的
&str
键找到一个值,其中键是
String
s,
&str
s“等效”于
String

但是,没有允许使用“等效”键更新映射的方法。例如,没有像
get_mut()
这样的方法可以返回对所包含值的可变引用


有没有一个特别的原因使它不可能实现,或者这只是一个缺少的部分,还没有人添加?

主要原因是没有人实现它。然而,整个
Equiv
/
\u Equiv
的情况被视为一种黑客行为,人们并不热衷于复制一半的
HashMap
接口来使用
\u Equiv
方法。将来我相信我们会有一个很好的解决方案,但现在我们没有。

get_mut
实际上存在:@a.B.你错估了他所说的,没有像
get_mut
这样的方法来获得等价的密钥。考虑到
find_equiv
的存在,我看不出为什么
find_mut_equiv
不存在。是否可以指定一个可以从一组对象(而不仅仅是
)实例化的哈希器/比较器,然后生成哈希值,并能够将该内部对象与
进行比较?没有重载让我觉得实例化部分可能很棘手…@MatthieuM。我不知道你的意思。(
Equiv
本质上是不同类型的广义
Eq
,但断言具有相同散列的两个对象也是
.Equiv
等价的。)