什麼是搜索特定的鍵和值的std :: Map的最佳方式?這基本上意味着我想查找是否存在一個由我指定的鍵和值的std :: pair。正在搜索標準::地圖
回答
像這樣的東西?
auto piter = m_mMap.find(iKey);
return pIter != m_mMap.end() && pIter->second == myvalue;
std :: map是一個唯一的關聯容器,這意味着沒有兩個元素具有相同的鍵。
因此,它足以通過std :: map :: find搜索特定的鍵。
@seegvic ...是的,這是** **好評;-) – 2010-11-04 10:39:03
由於std::map
是唯一鍵控的,因此您只需使用find()
查找密鑰,並且您將找到唯一的實例,然後可以將您的值與您檢查的值進行比較,以檢查值是否比較有利。
不要犯錯誤使用operator[]
將插入值或替換它,如果它不存在 - 可能不是你想要的。
對於在值上的某些標準上查找項目我通常使用謂詞函數與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);
}
要小心,通過這樣做你使用O(n)中的線性搜索,而使用std :: map :: find在O(日誌N)。 – 2010-11-04 11:12:24
你是完全正確的,但如果標準只是基於價值:這是做事的方式。起初我只是想到了價值標準......這是ssegvic的評論,讓我看到我的解決方案有點太過分了。但爲了學習目的,我認爲這很好,可能知道可以通過這種方式進行更復雜的搜索。 – 2010-11-04 12:16:43
- 1. VBA搜索標準
- 2. 地圖標註搜索
- 3. 正在搜索地圖或列表
- 4. 將標準Google搜索添加到地圖
- 5. 按標準搜索VS SEO
- 6. 搜索片,多重標準
- 7. 搜索標準表格
- 8. ActiveRecord的搜索與標準
- 9. 按標準動態搜索
- 10. 搜索 - 空標準字段
- 11. jqGrid清除搜索標準
- 12. 結合搜索標準
- 13. 在搜索上的Google地圖在地圖上搜索
- 14. 在連接表搜索多個標準
- 15. 谷歌地圖地方搜索標記圖標造型
- 16. 搜索圖標
- 17. 在地圖中搜索子地圖
- 18. 在iOS地圖上搜索
- 19. 必應地圖按標識搜索
- 20. 谷歌地圖API - 搜索XML標記
- 21. 搜索框搜索標記(谷歌地圖)
- 22. Grails搜索地圖
- 23. Google搜索地圖
- 24. 搜索多地圖
- 25. 搜索圖標無法正常工作
- 26. Android地圖搜索地址
- 27. 在地圖上標記並搜索標記位置
- 28. 根據一定的搜索標準顯示地址簿數據
- 29. 搜索字段中的搜索圖標
- 30. 帶有動態過濾器的搜索路線/搜索標準
@RA聽起來不錯。 – 2010-11-04 11:18:19