map::operator[]
немного странно. Это делает это:
- Ищите ключ.
- Если найден, верните его.
- Если нет, вставьте его и создайте по умолчанию его связанное значение.
- Затем верните ссылку на новое значение.
Шаг 3 несовместим с const
Несс. Вместо двух по-разному работающих operator[]
перегрузок язык заставляет вас использовать map::find
для const
объектов.
С другой стороны, можно утверждать, что бы map::operator[] const
сделал, если аргумента нет на карте? Бросить исключение? Неопределенное поведение? (В конце концов, это то, что vector::operator[]
делает с индексом, выходящим за пределы.) В любом случае проблему можно избежать только с небольшим неудобством для нас.
my_map.find(key)
возвращает my_map.end()
, если key
не найден.