簡體   English   中英

搜索一個std :: Map

[英]Searching a std::Map

在std :: Map中搜索特定鍵和值的最佳方法是什么? 基本上,這意味着我想查找是否存在一個由我指定的鍵和值的std :: pair。

由於std::map是唯一鍵,因此您只需要使用find()鍵,就可以找到唯一的實例,然后可以將其值與找到的值進行比較,以檢查這些值是否比較合適。

不要誤用operator[]來插入值或在不存在時替換它-可能不是您想要的值。

像這樣嗎?

auto piter = m_mMap.find(iKey);

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

std :: map是唯一的關聯容器,這意味着沒有兩個元素具有相同的鍵。

因此,通過std :: map :: find搜索特定鍵就足夠了。

為了在某​​些標准條件下查找項目,我通常將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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM