我有HashMap<(String, usize), f64>
。我还有一个&str
和一个usize
,我想在这个HashMap
中查找而不进行克隆。有办法以某种方式将(&str, usize)
作为(String, usize)
进行查找吗?
答案 0 :(得分:5)
不,你不能。查找HashMap<K,V>
的选项是:
entry
方法,需要K
个值,在您的情况下为(String, usize)
- 因此您需要构建String
。 get
,contains_key
等都采用&#34;借用&#34; K
的形式(文档说&Q
,其中K: Borrow<Q>
;这意味着&(String, usize)
或者可以产生一个的{.1}。从技术上讲,你可以迭代它并进行自己的比较,但这可能不是你想要的!
答案 1 :(得分:4)
然而,有一种方法可以做到这一点,不涉及分配字符串。但是您必须更改Hashmap,因此密钥的类型为(std::borrow::Cow<'a, str>, usize)
(有些生命周期'a
)。然后,您可以使用map.get((Cow::Borrowed(my_str_slice), 0))
查找值。