为何C++的unordered_map含vector值时无需初始化vector?
为什么C++的unordered_map无需提前初始化vector就能调用push_back?
核心原因是C++的unordered_map的operator[]具备自动插入默认构造值的特性,和Python普通字典的行为完全不同:
在C++中,当你通过
example["example_key"]访问unordered_map时:- 如果该键不存在,
operator[]会自动向map中插入一个以该键为索引、值为默认构造的vector<string>(也就是空vector)的键值对 - 返回这个刚创建的vector的引用
所以后续调用push_back是直接对已经存在的空vector操作,自然能正常运行。
- 如果该键不存在,
而Python的普通字典没有这个自动创建默认值的逻辑:
当你用example["example_key"]访问不存在的键时,字典不会自动创建对应的键值对,直接抛出KeyError。如果要实现类似C++的效果,Python可以用collections.defaultdict,示例代码如下:from collections import defaultdict example = defaultdict(list) example["example_key"].append("example_elem")
内容的提问来源于stack exchange,提问作者agctute
相关产品推荐
相关产品推荐

