在HashMap中查找键<(String,usize),f64>在Rust

时间:2016-06-15 08:11:22

标签: rust

我有HashMap<(String, usize), f64>。我还有一个&str和一个usize,我想在这个HashMap中查找而不进行克隆。有办法以某种方式将(&str, usize)作为(String, usize)进行查找吗?

2 个答案:

答案 0 :(得分:5)

不,你不能。查找HashMap<K,V>的选项是:

  • entry方法,需要K个值,在您的情况下为(String, usize) - 因此您需要构建String
  • 各种getcontains_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))查找值。