나는 녹슨 초보자입니다. 나는 (char, int) {Vertex name, cost}의 Vector에 char {vertex name}의 HashMap으로 지시 그래프의 인접 목록을 표현하려고합니다. 나는 마지막 HashMap을 불변으로하고 싶지만, 벡터를 만들고 싶다. 그리고 불변으로 만들 수있는 복사본을 만들 필요가 없다.녹에서 벡터의 HashMap을 만드는 방법은 무엇입니까?
내 코드는 다음과 같습니다. 표시된 줄에서 "변경할 수없는 참조 해제 (참조로 암시적임, 색인 작성 때문에)를 변경할 수 없습니다"라는 메시지가 나타납니다. 지도에서 Vec < (char, int)>을 변경할 수 없으므로 의미가 있습니다. 하지만 어떻게 수정해야할지 모르겠습니다.
녹에서 어떻게 할 수 있습니까?
fn get<'a>(&'a self, k: &K) -> &'a V
및 상수 (&
) 참조를 반환는 HashMap에 []
촬영
pub struct Edge {
to: char,
from: char,
weight: int
}
pub struct digraph {
_vertices: Vec<char>,
_adj_list: HashMap<char, Vec<(char,int)> >
}
impl digraph {
pub fn new(nodes: &Vec<char>, edges: &Vec<Edge>) -> Option<digraph> {
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[from].push((to,weight)) // *********** error here
}
Some(digraph { _vertices: (*nodes).clone(), _adj_list: tmp_adj_list })
}
}