回答problem you have...
我想为一套 keys 维护一个柜台.
然后你想看看How to lookup from and insert into a HashMap efficiently?.提示:*map.entry(key).or_insert(0) += 1
回答question you asked...
如何使用Rust中的默认值创建HashMap?
不,HashMap
没有存储默认值的位置.这样做会导致该数据 struct 的every个用户分配存储空间,这将是一种浪费.您还必须处理没有适当默认值的情况,或者无法轻松创建默认值的情况.
相反,您可以使用HashMap::get
查找值,如果缺少,则使用Option::unwrap_or
提供默认值:
use std::collections::HashMap;
fn main() {
let mut map: HashMap<char, usize> = HashMap::new();
map.insert('a', 42);
let a = map.get(&'a').cloned().unwrap_or(0);
let b = map.get(&'b').cloned().unwrap_or(0);
println!("{}, {}", a, b); // 42, 0
}
如果unwrap_or
不适用于您的 case ,则有几个类似的功能可能:
当然,欢迎你参加wrap this in a function or a data structure to provide a nicer API.
ArtemGr brings up an interesting point:
在C++中有一个映射inserting a default value when a key is accessed的概念.但这似乎总是有点漏洞百出:如果类型没有默认值呢?Rust对映射类型的要求较低,对键的存在(或不存在)要求更明确.
Rust 会增加皱纹.实际上inserting一个值需要简单地获得一个值也可以是change the 100.这将使对HashMap
中的值的任何现有引用无效,因为可能需要重新分配.因此,您将无法同时获得对两个值的引用!这将是非常严格的.