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