我有两个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])这样的东西存在?
答案 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)
答案 5 :(得分:0)
我喜欢b.count(i->first) > 0
。
答案 6 :(得分:0)
我会这样做:
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++;
}
}