使用[]运算符访问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()
检查密钥是否存在,在访问密钥之前还是有替代密钥?
答案 0 :(得分:3)
是的,您必须使用find
:
if (umap.find("Randy") == umap.end()) // does not exist
答案 1 :(得分:1)
除find()
或count()
之外,另一个替代方法是at()
方法,如果不存在则抛出异常。