std::find (unordered_)map
Posted
技术标签:
【中文标题】std::find (unordered_)map【英文标题】:std::find on an (unordered_)map 【发布时间】:2018-04-09 13:13:19 【问题描述】:对于 unordered_map,我想做一个反向查找(意思是找到给定值的键)。人们会期望使用 std::find 这很简单。我尝试了以下方法,但不起作用:
#include <unordered_map>
#include <algorithm>
int main()
std::unordered_map<int, int> map;
auto iter = std::find(map.begin(), map.end(), [](const std::pair<int, int> &pair) -> bool
return pair.second == 4;
);
编译器抱怨一个无效的二进制表达式,显然它试图将值与谓词本身进行比较:
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/predefined_ops.h :194:17: 错误:二进制表达式的操作数无效 ('std::pair' 和 'const (lambda at unordered_map.cpp:8:51)') 返回 *__it == _M_value;
我在这里缺少什么?据我所知,这应该是搜索地图的有效谓词。
【问题讨论】:
你的意思是find_if
?
将std::find
与std::unordered_map
一起使用几乎肯定是一个错误。使用std::unordered_map::find
。
顺便说一句,撇开问题不谈,您应该知道您正在检查地图中配对的副本。
@PasserBy 虽然我同意该评论的第一部分,但成员 find
在这里没有用处,因为我们没有根据密钥执行查找。
@PasserBy 这与 OP 想要的相反。他们在寻找价值,而不是钥匙
【参考方案1】:
std::find
函数用于在容器中查找值。如果您有要使用的谓词,请使用std::find_if
。
参见例如this std::find
and std::find_if
reference.
【讨论】:
以上是关于std::find (unordered_)map的主要内容,如果未能解决你的问题,请参考以下文章
std::unordered_map<int32_t, int32_t> 在堆上声明