如何查看地图中是否存在密钥?

时间:2011-06-03 13:53:27

标签: c++ stl map

我有两个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 个答案:

答案 0 :(得分:7)

使用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相同。

答案 1 :(得分:3)

使用map::find()

答案 2 :(得分:3)

如果i-&gt; first(i中指向的元素的键)出现在b中,则返回true。

if (b.find(i->first) != b.end())

答案 3 :(得分:2)

您无法使用operator[],因为如果密钥不存在,则会创建密钥。相反,请使用find

map<int,int>::const_iterator it = b.find(a->first);
if( it == b.end() )
  // NOT FOUND

答案 4 :(得分:1)

std :: map有一个名为find的函数,用于在地图中查找关键字。见this

所以代码应该是:

if( b.find( i->first ) != b.end() )

答案 5 :(得分:0)

我喜欢b.count(i->first) > 0

答案 6 :(得分:0)

map::find功能

我会这样做:

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;
}

答案 7 :(得分:0)

出于性能原因我的建议是:

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++;
  }

}