Является ли доступ к элементам std :: map с помощью at () медленнее, чем с помощью оператора []? - PullRequest
1 голос
/ 27 мая 2020

Когда я хочу получить определенный элемент из std::map, насколько мне известно, at() выполнит проверку границ. Означает ли это, что он медленнее, чем []?

1 Ответ

3 голосов
/ 27 мая 2020

Оба std::map::at и std::map::operator[] проверяют наличие ключа. Бывший выдает исключение, если не найден, позже создает значение по умолчанию.

Их сложность обязательно должна быть log(n) (поиск). Сама по себе производительность не обязательно должна быть идентичной, но на практике она должна быть похожей.

Так что выберите тот, который будет использоваться, исходя из их поведения (после поиска). Аналогичные альтернативы могут быть map::find или в некоторых случаях map::insert / insert_or_assign / emplace.

...