Зачем использовать std :: map :: find для проверки наличия у карт ключа? - PullRequest
2 голосов
/ 16 июня 2020

Недавно я узнал (не в результате исследований, поэтому, если это не так, скажите мне, и я исправлю это), что как-то работает следующее:

std::map<T*, U*> map;
std::cout << map[key_that_is_not_in_map] << std::endl;
// OUTPUT:
// 0

Однако многие люди рекомендуют использовать std::map::find(key_.....) != std::map::end().

Есть ли что-то в последнем, что делает его более безопасным, или первое применимо только к указателям ключей и значений?

1 Ответ

3 голосов
/ 16 июня 2020

Есть ли что-то в последнем, что делает его более безопасным, или первое применимо только к клавишам и значениям указателей?

Да , std::map::operator[] выполняет вставка, если ключа не существует. И std::map::find не делает.

From cppreference.com std::map::operator[]

Возвращает ссылка на значение, которое сопоставляется с ключом, эквивалентным ключу, выполнение вставки, если такой ключ еще не существует .

...