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

最佳答案

是的,您必须使用find进行检查:

if (umap.find("Randy") == umap.end()) // does not exist

关于c++ - 如何在不插入的情况下访问(检查)std::unordered_map的元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22998300/

10-08 21:17