Как узнать, присутствует ли ключ на карте? - PullRequest
2 голосов
/ 03 июня 2011

У меня есть две карты STL, такие как map<int,int>, и я хочу сравнить их ... вот код ...

map <int, int> a,b;
insert into a and b;
map<int,int>::iterator i;

for(i=a.begin();i!=a.end();i++){
    if(what should be here?)
         then cout << (*i).first << " also present in b" << endl;
}

Я надеялся, что что-то вроде (b [(* i) .first]). Существует ??

Ответы [ 8 ]

7 голосов
/ 03 июня 2011

Используйте map::find как:

for(i=a.begin(); i!=a.end(); i++)
{
  if( b.find(i->first) != b.end() )
       std::cout << (*i).first << " also present in b" << std::endl;
}

Примечание i->first и (*i).first совпадают.

3 голосов
/ 03 июня 2011

Это вернет истину, если i-> first (ключ элемента, на который указывает i) присутствует в b.

if (b.find(i->first) != b.end())
3 голосов
/ 03 июня 2011

Использование map::find().

2 голосов
/ 03 июня 2011

Вы не можете использовать operator[], потому что это создаст ключ, если он не существует.Вместо этого используйте find:

map<int,int>::const_iterator it = b.find(a->first);
if( it == b.end() )
  // NOT FOUND
1 голос
/ 03 июня 2011

std :: map имеет функцию find для поиска ключа на карте. Смотри это

Таким образом, код должен быть:

if( b.find( i->first ) != b.end() )
0 голосов
/ 03 июня 2011

Для вашей задачи по соображениям производительности я бы предложил что-то вроде:

map<int,int>::iterator ia  = a.begin(), ib  = b.begin(),
                       iae = a.end()  , ibe = b.end();
while(ia != iae && ib != ibe) {
  if      (ia->first < ib->first) ia++;
  else if (ia->first > ib->first) ib++;
  else {
    cout << ia->first << " also present in b" << endl;
    ia++; ib++;
  }

}
0 голосов
/ 03 июня 2011

карта :: найти функция

Я сделаю так:

std::map <int, int> a,b;
insert into a and b;
std::map<int,int>::iterator it = a.begin();
std::map<int,int>::iterator ite = a.end();

while (it != ite)
{
  if (b.find(it->first) != b.end())
  {
    std::cout << it->first << " also present in b" << std::endl;
  }
  ++it;
}
0 голосов
/ 03 июня 2011

Мне нравится b.count(i->first) > 0.

...