我正在尝试创建一个结构,该结构包含一个Vec v
元素和一个HashMap m
元素作为键的引用。
v
我遇到以下错误
use std::collections::HashMap;
struct VecMap<'a> {
v: Vec<String>,
m: HashMap<&'a String, u32>
}
fn func() -> VecMap {
let keys = vec!["a".to_string(), "b".to_string()];
let mut vm = VecMap{v:keys, m:HashMap::new()};
for k in &vm.v {
vm.m.insert(&k,0);
}
vm
}
fn main() {
let vm = func();
}
我想问题是VecMap的HashMap包含从Vec借用的引用,但是编译器无法确保这些引用在HashMap的生存期内保持有效,因为其生存期与Vec无关。 。创建后,VecMap应该是不可变的。如果func函数未返回值,则代码会编译,我想是因为在这种情况下,编译器知道这两个函数都将在func末尾消失。
那确实是问题吗?如何解决这个问题?