我有一个HashMap<Node, u32>
,我要搜索的是使用&str
而不是String
;有可能吗?
use std::collections::HashMap;
#[derive(PartialEq, Hash, Eq, Clone, Copy, Debug)]
enum NodeType {
A,
B,
}
#[derive(PartialEq, Hash, Eq, Clone, Debug)]
struct Node {
id: String,
code: u8,
node_type: NodeType,
}
#[derive(PartialEq, Hash, Eq, Clone, Debug)]
struct NodeRef<'a> {
id: &'a str,
code: u8,
node_type: NodeType,
}
fn main() {
let m = HashMap::<Node, u32>::new();
let x = NodeRef {
id: "aaaa",
code: 5,
node_type: NodeType::A,
};
m.get(&x);
}
如果添加以下代码,则会编译:
impl<'a> Borrow<NodeRef<'a>> for Node {
fn borrow(&self) -> &NodeRef<'a> {
unimplemented!();
}
}
我不知道如何实现borrow
方法:
impl<'a> Borrow<NodeRef<'a>> for Node {
fn borrow(&self) -> &NodeRef<'a> {
&NodeRef {
id: self.id.as_str(),
code: self.code,
node_type: self.node_type,
}
}
}
由于引用了临时变量,因此无法编译。我看到每个线程使用一个全局NodeRef
的一种方法,还有其他方法吗?