Подтвердить что ты не робот

Получить значение с карты

У меня есть карта, а именно valueMap

typedef std::map<std::string, std::string>MAP;
MAP valueMap;
...
//Entering data

Затем я передаю это отображение функции по ссылке

void function(const MAP &map)
{
  std::string value = map["string"];
  // by doing so i am getting error.
}

Как я могу получить значение из карты, которое передается как ссылка на функцию?

4b9b3361

Ответ 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.

Ответ 2

map.at( "ключ" ) выдает исключение, если отсутствует ключ

Если k не соответствует ключу любого элемента в контейнере, функция выбрасывает исключение out_of_range.

http://www.cplusplus.com/reference/map/map/at/