如何在不插入std :: unordered_map的情况下访问(检查)它的元素?

时间:2014-04-10 20:25:18

标签: c++ c++11 unordered-map square-bracket

使用[]运算符访问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()检查密钥是否存在,在访问密钥之前还是有替代密钥?

2 个答案:

答案 0 :(得分:3)

是的,您必须使用find

进行检查
if (umap.find("Randy") == umap.end()) // does not exist

答案 1 :(得分:1)

find()count()之外,另一个替代方法是at()方法,如果不存在则抛出异常。