Оба std::map::at
и std::map::operator[]
проверяют наличие ключа. Бывший выдает исключение, если не найден, позже создает значение по умолчанию.
Их сложность обязательно должна быть log(n)
(поиск). Сама по себе производительность не обязательно должна быть идентичной, но на практике она должна быть похожей.
Так что выберите тот, который будет использоваться, исходя из их поведения (после поиска). Аналогичные альтернативы могут быть map::find
или в некоторых случаях map::insert
/ insert_or_assign
/ emplace
.