Rust 在哈希表中查找项,其中键是包含不可复制类型的元组

Rust 在哈希表中查找项,其中键是包含不可复制类型的元组,rust,Rust,假设我有这样一个哈希表: let table:HashMap=HashMap::new(); (在实际应用中,类型不是Vec,而是不是Copy的其他结构) 键类型为(usize,Vec)。但是,如果我尝试在只有(usize,&Vec)的情况下执行查找,这是不允许的,因为HashMap::get需要借用,而(usize,&Vec)无法满足这一要求 上下文如下所示: fn查找(表:&mut HashMap,索引:usize,向量:&Vec){ //注意“vector.clone()”-希望避免这样

假设我有这样一个哈希表:

let table:HashMap=HashMap::new();
(在实际应用中,类型不是
Vec
,而是不是
Copy
的其他结构)

键类型为
(usize,Vec)
。但是,如果我尝试在只有
(usize,&Vec)
的情况下执行查找,这是不允许的,因为
HashMap::get
需要
借用
,而
(usize,&Vec)
无法满足这一要求

上下文如下所示:

fn查找(表:&mut HashMap,索引:usize,向量:&Vec){
//注意“vector.clone()”-希望避免这样做
如果let Some(value)=table.get(&(index,vector.clone()){
// ..
}
}

使用此键类型执行查找时,是否有方法避免使用
.clone()
?我在想,围绕键类型的结构包装器类型可能允许我编写
借用
的自定义实现,但我不太确定这是否在正确的轨道上,或者如何工作。

可能会提供一个解决方案,但它比我预期的更复杂,而且它似乎需要动态调度。这里是您尝试执行的问题。想象一个元组是两个在内存中直接相邻的值(这并不总是正确的,只是假设它是一个位)。
(usize,Vec)
必须是一个
usize
,后跟一个
Vec
,对它的引用需要一个指向内存区域的指针,该区域包含
usize
,后跟一个
Vec
。当你只有一个
&Vec
时,你有一个对
Vec
的引用,但是不能保证在它前面有一个
usize
,也不能保证你能在它前面写一个
usize
。这导致它非常困难(基本上不可能安全地做,除非我遗漏了什么)要生成对整个元组的引用而不克隆
Vec
或使用
unsafe
(尽管我不认为有一种方法可以使用
unsafe
,但实际上并不不安全),请三思,可以使用,以避免必须克隆实际的
Vec
内容。@Aplet123请注意,OP愿意修改哈希映射定义,以便为密钥使用自定义类型。是否可以定义一个由
(usize,Vec)
组成的键类型,但可以强制为
(usize,Vec)
,以进行哈希和比较?哈希映射已经通过
借用
支持类似的功能,允许将拥有的字符串与字符串片段进行比较和哈希。似乎类似的事情在这里也应该是可能的,但是
借用
允许它并不明显,除非通过。