如何从HashMap创建条目Vec?

时间:2018-07-21 18:51:16

标签: types rust

给定HashMap<Token, Frequency>,我想要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() {}

此代码有错误:

error[E0106]: missing lifetime specifier
 --> src/main.rs:8:15
  |
8 |     text: Vec<std::collections::hash_map::Entry<Token, Freq>>,
  |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected lifetime parameter

在结构中添加生存期说明符会导致相同的错误:

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

我的主要问题是我不知道std::collections::hash_map::Entry<Token, Freq>是否正确。我已经尝试了很多事情,例如更明显的HashMap<Token, Freq>::Entry,却无法正常工作。

1 个答案:

答案 0 :(得分:1)

Entry需要生存期,如the documentation所示。像这样:

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