1

使用 [ ] 运算符访问 std::unordered_map 的元素会插入新元素:

std::unordered_map<std::string, uint32_t> umap = {
    {"Thomas", 1},
    {"Frank", 5},
    {"Lisa", 7}
};

// umap.size() is 3
uint32_t id = umap["Lisa"];
// umap.size() is 3
id = umap["Randy"]; // key "Randy" doesn't exist
// umap.size() is 4

我天真地假设 [ ] 运算符在没有右手赋值的情况下会表现为只读。在访问密钥之前,我是否必须通过count()find()是否存在密钥来检查它,或者是否有替代方法?

4

2 回答 2

3

是的,您必须使用以下命令进行检查find

if (umap.find("Randy") == umap.end()) // does not exist
于 2014-04-10T20:27:00.183 回答
1

除了find()or count(),另一种选择是at()方法,如果它不存在则抛出异常。

于 2014-04-10T20:53:53.363 回答