operator[]
является неконстантной функцией-членом и не может быть вызван для объекта, имеющегося у вас по константной ссылке. Он не может быть константным членом, так как он указан для вставки элемента , если ключ отсутствует на карте. И так получилось, что вам даже не нужно его использовать.
Вы используете find()
, а затем просто отбрасываете результат, почему? Он получает итератор для элемента, если этот элемент существует. Так что не отказывайтесь от этого, используйте его.
auto item = objectParameters.find(CAPABILITY_TYPE_SPECIE);
if (item != objectParameters.end()) {
auto map2 = item->second;
Хотя, если вы хотите, чтобы map2
был тем же, который уже есть в map1
, вышеприведенное также не делает этого. Поскольку auto map2
является копией item->second
. Чтобы изменить элемент в map1
, нам нужно сделать map2
ссылку:
auto item = objectParameters.find(CAPABILITY_TYPE_SPECIE);
if (item != objectParameters.end()) {
auto& map2 = item->second;
Что касается вашего редактирования, удаление const для "исправления" таких ошибок - неправильная вещь. Правильность Const важна, и когда вы делаете такое «исправление», это может привести к незначительным ошибкам в вашем коде. Потому что теперь вещи, которые не должны меняться, могут начать неожиданно меняться.