2010-11-04 68 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