为什么C++ unordered_maps不需要向量初始化

pnwntuvh  于 2023-05-02  发布在  其他
关注(0)|答案(1)|浏览(131)

我通常喜欢用Python编程,我注意到在用C编写的Leetcode问题解决方案中,unordered_map<string, vector<string>>不需要在向量被推到之前进行初始化。
例如,下面的代码可以在C
中成功运行

unordered_map<string, vector<string>> example;

example["example_key"].push_back("example_elem");

但在Python中,类似的代码会返回KeyError,因为与键关联的列表尚未初始化

example = {}

example["example_key"].append("example_elem")

为什么unordered_map不需要在向其推送内容之前初始化vector?

piok6c0g

piok6c0g1#

https://en.cppreference.com/w/cpp/container/unordered_map/operator_at
std::unordered_map<...>::operator[]插入一个就地构造的value_type对象。..如果key不存在。这个函数相当于return this->try_emplace(key).first->second;。(C++17起)
请注意,Map还提供了一个at成员,用于进行边界检查。
https://en.cppreference.com/w/cpp/container/unordered_map/at
std::unordered_map<...>::at返回一个引用,指向key等于key的元素的Map值。如果不存在这样的元素,则抛出类型为std::out_of_range的异常。

相关问题