【发布时间】: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 想要的相反。他们在寻找价值,而不是钥匙
标签: c++