hashmap储存有向图_如何在Rust中构建向量的HashMap?
將[]放到HashMap上是(現已棄用)get(..)函數的糖,該聲明是:
fn get(&'a self, k: &K) -> &'a V
并返回一個常量(&)引用.但是Vec的push(..)方法需要一個& mut引用,因此錯誤.
你需要的是HashMap的get_mut(..)方法,它返回對該值的& mut引用.
還有一些小問題:
>調用方法時,取消引用是自動的:(* foo).bar()與foo.bar()完全相同
>你可以在你的循環中自動取消引用edge.iter(){…}中的for& edge
包括所有這些,你的功能變成:
impl digraph {
pub fn new(nodes: &Vec, edges: &Vec ) -> Option {
let mut tmp_adj_list = HashMap::new();
for &node in nodes.iter() {
tmp_adj_list.insert(node, Vec::new());
}
for &edge in edges.iter() {
let Edge{ to: to, from:from, weight:weight } = edge;
if !nodes.contains(&to) | !nodes.contains(&from) {
return None;
}
tmp_adj_list.get_mut(&from).push((to,weight))
}
Some(digraph { _vertices: nodes.clone(), _adj_list: tmp_adj_list })
}
}
總結
以上是生活随笔為你收集整理的hashmap储存有向图_如何在Rust中构建向量的HashMap?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cad文字递增快捷键_CAD的这些快捷键
- 下一篇: 企业联合体的形式_母公司是否可以用子公司