给定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
,却无法正常工作。
答案 0 :(得分:1)
Entry
需要生存期,如the documentation所示。像这样:
struct TokenizeState<'a> {
tokens: HashMap<Token, Freq>,
text: Vec<std::collections::hash_map::Entry<'a, Token, Freq>>,
}