2010-11-04 69 views

回答

4

像这样的东西?

auto piter = m_mMap.find(iKey); 

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

@RA听起来不错。 – 2010-11-04 11:18:19

3

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

因此,它足以通过std :: map :: find搜索特定的键。

+0

@seegvic ...是的,这是** **好评;-) – 2010-11-04 10:39:03

5

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

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

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

要小心,通过这样做你使用O(n)中的线性搜索,而使用std :: map :: find在O(日志N)。 – 2010-11-04 11:12:24

+0

你是完全正确的,但如果标准只是基于价值:这是做事的方式。起初我只是想到了价值标准......这是ssegvic的评论,让我看到我的解决方案有点太过分了。但为了学习目的,我认为这很好,可能知道可以通过这种方式进行更复杂的搜索。 – 2010-11-04 12:16:43