Если элемент не существует в map
, operator []
добавит его - что, очевидно, не может работать на карте const
, поэтому C ++ не определяет версию const
оператора.Это хороший пример проверки типов компилятором, предотвращающей потенциальную ошибку времени выполнения.
В вашем случае вам нужно использовать find
вместо этого, что только вернетэлемент (итератор в), если он существует, он никогда не изменит map
.Если элемент не существует, он возвращает итератор для end()
.
at
, который не существует и даже не должен компилироваться.Возможно, это «расширение компилятора» (= ошибка новое в C ++ 0x).