C ++ STL map - условный возврат - PullRequest
0 голосов
/ 17 декабря 2011

Я ищу элегантную замену:

if (MyMap.count(x)) return MyMap[x];

Хотя этот код делает то, что я хочу - он возвращает запись, если она существует, - в случае, когда элемент существует,ищет карту дважды.Есть ли более элегантный способ?

Ответы [ 2 ]

5 голосов
/ 17 декабря 2011

Это типичный способ сделать это:

MyMapType::const_iterator i = myMap.find(x);
if (i != myMap.end())
   return i->second;
5 голосов
/ 17 декабря 2011

std::map::find() возвращает iterator.

Вы можете разыменовать итератор, это не end() без необходимости повторного поиска map.

Для тривиального примера:

typedef std::map<char, int> test_t;
test_t test;
test.insert(std::make_pair('a', 1));

test_t::iterator found = test.find('a');
if (found != test.end())
{
    std::cout << found->second;
}
else
{
    std::cout << "Not found";
}

Возможно, не более элегантно с точки зрения количества кода, но более эффективно, чем то, что у вас есть в настоящее время.

...