c++ - Rust 是否像 C++ 一样在索引时隐式创建映射条目?

标签 c++ rust hashmap

在 C++ 中,索引运算符是为 std::mapstd::unordered_map 定义的,因此如果您对容器的引用是非常量的,那么没有分配的索引足以在容器内隐式创建一个值。这有时会产生细微的错误,您希望在容器中引用一个值,但实际上却创建了一个,例如config["stting"] 而不是 config["setting"]

我知道 Python 通过将 __setitem____getitem__ 作为单独的方法来解决这个问题,但这需要与解析器合作。

Rust 是否采取了措施来解决这种常见的错误来源?

最佳答案

No Rust 没有这个问题。 Rust 集合中没有隐式创建项。

例如,您要将键值对插入到 std::collections::HashMapmap.insert(key, value)并使用 let value = map.get(key); 检索值.

请注意 .get()将返回 Option<&V> ,所以如果 key 不存在,你将得到 None结果。

Rust 还提供了一种简单的方法来检索值或在值不存在时为给定键插入一些默认值:

let value = map.entry(key).or_insert(0);

HashMap还有implements the Index trait ,它允许使用 let value = map[key]; 检索值,如果 key 将会 panic map 中不存在.

请注意,因为 HashMap不执行 IndexMut , 这个[ ]方括号语法始终返回对值的不可变引用,因此您不能以这种方式插入或修改值。

关于c++ - Rust 是否像 C++ 一样在索引时隐式创建映射条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57151374/

相关文章:

c++ - 为什么重写虚函数时需要显式模板参数?

rust - 如何获得期权的值(value)或设置它为空?

rust - 如何在Rust Diesel中使用时间戳和时间间隔进行算术运算

java - HashMap 的 ContainsKey 不适用于自定义类作为键

java - 如果 HashMap 名称为空则打印消息

c++ - 从 C++ 处理程序捕获时如何获取 Ada 异常消息?

c++ - 删除对本地创建的指针的引用

rust - 自定义迭代器中可变引用的生命周期参数问题

Java HashMap 内容好像变了没变

c++ - 约束和显式模板实例化