如何使用Vec和引用Vec元素的HashMap创建结构?

时间:2019-06-17 05:51:18

标签: rust lifetime

我正在尝试创建一个结构,该结构包含一个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末尾消失。

那确实是问题吗?如何解决这个问题?

0 个答案:

没有答案