Я уверен, что я уже видел этот вопрос где-то (comp.lang.С++? Google, похоже, не находит его там), но быстрый поиск здесь, похоже, не находит его здесь:
Почему оператор std:: map [] создает объект, если ключ не существует? Я не знаю, но для меня это кажется противоречивым, если сравнивать с большинством других операторов [] (например, std::vector), где, если вы его используете, вы должны быть уверены, что индекс существует. Мне интересно, какое обоснование для реализации этого поведения в std:: map. Как я уже сказал, не было бы более интуитивным, чтобы действовать скорее как индекс в векторе и сбое (хорошо undefined поведение, которое я предполагаю) при доступе с недопустимым ключом?
Уточнение моего вопроса после просмотра ответов:
Хорошо, до сих пор я получил много ответов, говорящих в основном об этом дешево, поэтому почему бы и нет. Я полностью согласен с этим, но почему бы не использовать выделенную функцию для этого (я думаю, один из комментариев сказал, что в java нет оператора [], и функция называется put)? Моя точка зрения заключается в том, почему оператор map [] не работает как вектор? Если я использую оператор [] в индексе вне диапазона на векторе, мне не хотелось бы вставлять элемент , даже если он был дешевым, потому что это, вероятно, означает ошибку в моем коде. Я хочу сказать, почему это не то же самое с картой. Я имею в виду, для меня использование оператора [] на карте означало бы: я знаю, что этот ключ уже существует (по какой-то причине я просто вставил его, у меня есть избыточность где-нибудь, что бы то ни было). Думаю, это было бы более интуитивно.
Сказано, в чем преимущество выполнения текущего поведения с оператором [] (и только для этого я согласен, что должна существовать функция с текущим поведением, а не оператор [])? Может быть, это дает более четкий код? Я не знаю.
Еще один ответ заключался в том, что он уже существует таким образом, поэтому почему бы не сохранить его, но потом, возможно, когда они (те, которые были перед stl) решили реализовать его так, как они обнаружили, что это обеспечило преимущество или что-то еще? Поэтому мой вопрос в основном: зачем выбирать его таким образом, что означает некоторую несогласованность с другим оператором []. Какую пользу он дает?
Спасибо