什么是搜索特定的键和值的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