我试图检查一个给定的键是否在一个映射中,有点不能这样做:

typedef map<string,string>::iterator mi;
map<string, string> m;
m.insert(make_pair("f","++--"));
pair<mi,mi> p = m.equal_range("f");//I'm not sure if equal_range does what I want
cout << p.first;//I'm getting error here

那么我怎么打印p中的内容呢?


当前回答

使用map::find和map::end:

if (m.find("f") == m.end()) {
  // not found
} else {
  // found
}

其他回答

map <int , char>::iterator itr;
    for(itr = MyMap.begin() ; itr!= MyMap.end() ; itr++)
    {
        if (itr->second == 'c')
        {
            cout<<itr->first<<endl;
        }
    }

使用map::find和map::end:

if (m.find("f") == m.end()) {
  // not found
} else {
  // found
}

我想你需要map::find。如果m.find("f")等于m.end(),则没有找到该键。否则,find返回指向所找到元素的迭代器。

这个错误是因为p.first是一个迭代器,它不适用于流插入。将最后一行更改为cout << (p.first)->first;。P是一对迭代器,P .first是一个迭代器,P .first->first是关键字串。

一个map对于一个给定的键只能有一个元素,所以equal_range不是很有用。它是为map定义的,因为它是为所有关联容器定义的,但它对multimap更有趣。

m.find == m.end() // not found 

如果你想使用其他API,那么找到m.count(c)>0

 if (m.count("f")>0)
      cout << " is an element of m.\n";
    else 
      cout << " is not an element of m.\n";

如果你想比较一对地图,你可以使用这个方法:

typedef map<double, double> TestMap;
TestMap testMap;
pair<map<double,double>::iterator,bool> controlMapValues;

controlMapValues= testMap.insert(std::pair<double,double>(x,y));
if (controlMapValues.second == false )
{
    TestMap::iterator it;
    it = testMap.find(x);

    if (it->second == y)
    {
        cout<<"Given value is already exist in Map"<<endl;
    }
}

这是一个有用的技巧。