搜索std :: Map

时间:2010-11-04 10:22:07

标签: c++

在std :: Map中搜索特定键和值的最佳方法是什么?这基本上意味着我想找到是否存在一个带有我指定的键和值的std :: pair。

4 个答案:

答案 0 :(得分:5)

由于std::map是唯一键控的,因此您只需使用find()查找密钥,并且您将找到唯一的实例,然后您可以将您的值与您要检查的值进行比较如果值比较有利。

不要错误地使用operator[]来插入值,或者如果它不存在则替换它 - 可能不是你想要的。

答案 1 :(得分:4)

这样的东西?

auto piter = m_mMap.find(iKey);

return pIter != m_mMap.end() && pIter->second == myvalue;

答案 2 :(得分:3)

std :: map是一个唯一的关联容器,意味着没有两个元素具有相同的键。

因此,只需通过std :: map :: find。

搜索特定键即可

答案 3 :(得分:0)

为了在值的某些条件上查找项​​目,我通常使用具有std::find_if函数的谓词仿函数。

#include <map>
#include <algorithm>
#include <string>

typedef std::map<int,std::string> MyMap;
typedef std::pair<int,std::string> MyPair;

struct Predicate
{
    Predicate(const MyPair& myPair):m_myPair(myPair)
    {
    }

    bool operator() (const std::pair<int,std::string> aPair)
    {
        return aPair.first == m_myPair.first && aPair.second == m_myPair.second;

    }

    MyPair m_myPair;
};


void Test()
{
    MyMap myMap;

    MyPair aPair(0,std::string("aTest"));
    Predicate predicate(aPair);

    MyMap::iterator iter = std::find_if(myMap.begin(),myMap.end(),predicate);
}