Как получить элемент константной мапы?

217
07 апреля 2018, 22:14

Создаю глобальную константную мапу и пытаюсь взят её элемент через опертаор [ ] в константную переменную, но компилятор говорит, что так нельзя. Какие ограничения не позволяют компилятору это сделать? Т.е. интересует именно причина, а не то как это обойти.

const std::unordered_map<int, string> MapWithModulesNames{
    {1, string{"LegacyBssManager"}},
    {2, string{"BsSettings"}},
};
int main() {
    const string a = MapWithModulesNames[1];
    system("PAUSE");
    return 0;
}
Answer 1

У std::map нет константного operator[], потому что этот оператор создаёт элемент карты, если такого ключа ещё нет в оной. Если нужен доступ именно к существующему элементу, тогда нужно использовать at.

Answer 2

Проблема в том, что оператор [] неконстантный, и возвращает неконстантную ссылку. Поэтому к константному unordered_map он неприменим...

READ ALSO
Задание C++. d=2*c;

Задание C++. d=2*c;

Здравствуйте! Мне задали создать переменную со значением 2*сИ дать ей имя d

314
Не компилируется код парсера

Не компилируется код парсера

Пишу парсер датыКод не компилируется

225