Как получить доступ (проверить) элемент std :: unordered_map, не вставляя в него?

При доступе к элементам 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

Решение

Да, вы должны проверить с помощью find:

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

Другие решения

Кроме как find() или же count()другой альтернативой является at() метод, который выдает исключение, если его нет.

1

По вопросам рекламы [email protected]