Rust 是否有方法覆盖特定HashSet或HashMap类型的相等和哈希函数?

Rust 是否有方法覆盖特定HashSet或HashMap类型的相等和哈希函数?,rust,hashmap,hashset,Rust,Hashmap,Hashset,我有一个用户结构: struct用户{ id:i32, 电子邮件:String, // ... } 在我的代码的一部分中,我希望通过数据库ID获得唯一用户,但在另一部分代码中,我希望通过电子邮件地址获得唯一用户。我以前在一些系统上工作过,在这些系统中,用户使用LDAP CNs、电子邮件等映射到外部系统帐户。在某些情况下,能够通过不同的ID映射用户是非常有用的 在.NET中,您可以传入一个接口来覆盖特定字典的equals/hash。在C++中,类具有哈希函数和EQ函数的通用参数。在Java中,我

我有一个
用户
结构:

struct用户{
id:i32,
电子邮件:String,
// ...
}
在我的代码的一部分中,我希望通过数据库ID获得唯一用户,但在另一部分代码中,我希望通过电子邮件地址获得唯一用户。我以前在一些系统上工作过,在这些系统中,用户使用LDAP CNs、电子邮件等映射到外部系统帐户。在某些情况下,能够通过不同的ID映射用户是非常有用的

在.NET中,您可以传入一个接口来覆盖特定
字典的equals/hash
。在C++中,类具有哈希函数和EQ函数的通用参数。在Java中,我已经学会了在我想要从某个对象中获取唯一值时,只使用
Map
s而不是
Set
s,但这可能会很尴尬,尤其是对于复合键

老实说,这是一种非常罕见的情况,而且总是有使用映射而不是集合或使用自己的
散列
/
Eq
impl
块创建包装结构的解决方法。我只是好奇,在Rust中是否有一种更简单的方法可以做到这一点,但我还不知道。

使用一种或多种等式和哈希的具体定义:

使用std::hash::{hash,Hasher};
结构ById(用户);
ById的impl哈希{
fn散列(&self,h:&mut h)
哪里
H:哈瑟,
{
self.0.id.hash(h)
}
}
ById的impl PartialEq{
fn eq(&self,其他:&self)->bool{
self.0.id==other.0.id
}
}
ById{}的impl Eq
fn示例(k:User,v:i32){
让mut h=std::collections::HashMap::new();
h、 插入(ById(k),v);
}

当我从地图中拉出
ById
s时,是否需要使用
.0
获取底层
用户

隐式转换到底层的
用户
有什么神奇之处吗

没有

我最好还是实现
Deref
之类的东西

另见:


当我从地图中拉出
ById
s时,是否需要使用
.0
获取底层
用户
?隐式转换到底层的
用户
有什么神奇之处吗?虽然,我可以看出这太神奇了。我最好还是实现
Deref
之类的东西。想法?我已经回复了。