посмотрим, есть ли ключ в карте c ++ - PullRequest
3 голосов
/ 22 октября 2011

в моей функции, у меня есть этот параметр:

map<string,int> *&itemList

Я хочу сначала проверить, существует ли ключ. Если этот ключ существует, получите значение. Я думал это:

map<string,int>::const_iterator it = itemList->find(buf.c_str());
if(it!=itemList->end())
    //how can I get the value corresponding to the key?

правильный способ проверить, существует ли ключ?

Ответы [ 2 ]

6 голосов
/ 22 октября 2011

Да, это правильный способ сделать это.Значение, связанное с ключом, сохраняется в second элементе std::map итератора.

map<string,int>::const_iterator it = itemList->find(buf.c_str());
if(it!=itemList->end())
{
  return it->second; // do something with value corresponding to the key
}
1 голос
/ 22 октября 2011

Нет необходимости перебирать все элементы, вы можете просто получить доступ к одному с указанным ключом.

if ( itemList->find(key) != itemList->end() )
{
   //key is present
   return *itemList[key];  //return value
}
else
{
   //key not present
}

РЕДАКТИРОВАТЬ:

Предыдущая версия просматривает карту дважды.Лучшее решение было бы:

map::iterator<T> it = itemList->find(key);
if ( it != itemList->end() )
{
   //key is present
   return *it;  //return value
}
else
{
   //key not present
}
...