我正在解决与How to lookup from and insert into a HashMap efficiently?中的问题类似的问题。我有一个带有stat
键的映射,我想编写一个函数,如果键存在,则返回键的值;如果不存在,则计算并插入键的值。
从该问题的答案来看,我知道执行此操作的正确方法是使用String
。所以我写了这个:
Entry
现在我的问题是我不能再使用fn get_or_calculate(&self, key: &str) -> u64 {
match self.map.entry(key) {
Entry::Occupied(o) => o.get(),
Entry::Vacant(v) => v.insert(2 + 2),
}
}
来查找值。 &str
愉快地接受map.get()
,而&str
需要一个map.entry()
才能拥有以下所有权:
String
我可以只使用error[E0308]: mismatched types
--> src/lib.rs:15:30
|
15 | match self.map.entry(key) {
| ^^^
| |
| expected struct `std::string::String`, found &str
| help: try using a conversion method: `key.to_string()`
|
= note: expected type `std::string::String`
found type `&str`
,但我知道这样做可能会很昂贵。感觉有点不必要-因为to_string()
的功能没有超出我的功能,所以不需要获取字符串的所有权。
即使键为Entry
,也可以将Entry
与&str
一起使用吗?我可以不使用String
来重写代码吗?