我通常喜欢用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?
1条答案
按热度按时间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
的异常。