Types 如何从HashMap创建条目的Vec?

Types 如何从HashMap创建条目的Vec?,types,rust,Types,Rust,给定一个HashMap,我想要一个对这些对的Vec引用。我发现这对是Entry类型的,所以看起来像: use std::collections::HashMap; type Freq = u32; type Token = String; struct TokenizeState { tokens: HashMap<Token, Freq>, text: Vec<std::collections::hash_map::Entry<Token, Freq

给定一个HashMap,我想要一个对这些对的Vec引用。我发现这对是Entry类型的,所以看起来像:

use std::collections::HashMap;

type Freq = u32;
type Token = String;

struct TokenizeState {
    tokens: HashMap<Token, Freq>,
    text: Vec<std::collections::hash_map::Entry<Token, Freq>>,
}

fn main() {}
此代码有一个错误:

错误[E0106]:缺少生存期说明符 ->src/main.rs:8:15 | 8 |文本:Vec, |^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^预期的生存期参数 向结构添加生存期说明符会导致相同的错误:

struct TokenizeState<'a> {
    tokens: HashMap<Token, Freq>,
    text: Vec<&'a std::collections::hash_map::Entry<Token, Freq>>,
}
我的主要问题是,我不知道std::collections::hash\u map::Entry的类型是否正确。我已经尝试了很多东西,比如更明显的HashMap::Entry,但无法让它工作。

正如您在中所看到的,Entry需要生命周期。像这样:

struct TokenizeState<'a> {
    tokens: HashMap<Token, Freq>,
    text: Vec<std::collections::hash_map::Entry<'a, Token, Freq>>,
}

我认为以这种方式使用Entry是行不通的,因为Entry是用来修改地图的。这意味着它封装了一个可变借阅,一次只能有一个条目。因此,您可能应该定义自己的键和值配对类型,或者只使用配对。@Shepmaster实际上,我特意使用了更通用的映射,而不是哈希映射。比如,我对任何类似的类型都没问题,甚至很可能会使用BTreeMap IRL,如果它像上面评论中提到的starblue那样工作的话。还有,为什么要用src/main.rs替换test.rs?为什么你把标题从“创建…”改为“我如何创建…”结尾有问号?第一个问题较短,不会使问题变得不清楚。更一般——这个问题没有一般意义。任意映射类型可能没有相应的条目,或者其条目可能没有生存期参数,等等。src/main.rs-我将您的代码复制到中,以对其进行格式化,确保其编译,并确保错误消息与许多问题所没有的代码相匹配。游乐场使用main.rs作为其文件名;没有什么有意义的区别。更改标题-堆栈溢出是一个问答网站。问题有问号,是完整的英语句子。@Shepmaster问题有问号,是完整的英语句子-不一定,因为它是问答网站。例如,如果您发送的修补程序修复了123,那么在应用时您不会写入,而是修复了123,这是不必要的,因为这是显而易见的。这里也一样:在我的问题中,如何创建条目的Vec有多余的文本,这是一个问题,因为该网站是问答网站。