Ответ 1
К сожалению, std::map::operator[]
- это неконстантная функция-член, и у вас есть ссылка const.
Вам либо нужно изменить подпись function
, либо сделать:
MAP::const_iterator pos = map.find("string");
if (pos == map.end()) {
//handle the error
} else {
std::string value = pos->second;
...
}
operator[]
обрабатывает ошибку, добавляя построенное по умолчанию значение к карте и возвращающее ссылку на нее. Это бесполезно, когда все, что у вас есть, является ссылкой на константу, поэтому вам нужно будет сделать что-то другое.
Вы можете игнорировать возможность и написать string value = map.find("string")->second;
, если ваша программная логика как-то гарантирует, что "string"
уже является ключом. Очевидная проблема заключается в том, что если вы ошибаетесь, вы получаете поведение undefined.