При доступе к элементам 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
Кроме как find()
или же count()
другой альтернативой является at()
метод, который выдает исключение, если его нет.