什么是搜索特定的键和值的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. jqGrid清除搜索标准
- 6. 搜索 - 空标准字段
- 7. 谷歌地图地方搜索标记图标造型
- 8. 在连接表搜索多个标准
- 9. 在地图中搜索子地图
- 10. 必应地图按标识搜索
- 11. 搜索框搜索标记(谷歌地图)
- 12. 搜索多地图
- 13. 搜索图标无法正常工作
- 14. Android地图搜索地址
- 15. 在地图上标记并搜索标记位置
- 16. 根据一定的搜索标准显示地址簿数据
- 17. 带有动态过滤器的搜索路线/搜索标准
- 18. JqGrid搜索选项:toolbarsearch vs标准搜索窗口
- 19. 需要正确的数字标准搜索查询
- 20. 在搜索视图中更改默认搜索图标位置
- 21. 根据匹配标准搜索
- 22. 蟒蛇imaplib搜索多个标准
- 23. 使用CouchDB进行多标准搜索
- 24. 搜索无字段长度标准化
- 25. Java按不同标准搜索条件
- 26. 标准ML:搜索元组列表
- 27. 搜索字符串的标准命令
- 28. PHP MySQL的搜索与多个标准
- 29. Excel VBA中搜索多个标准
- 30. VBA中的VBA多标准搜索
@RA听起来不错。 – 2010-11-04 11:18:19