std :: find(无序)地图

时间:2018-04-09 13:13:19

标签: c++

对于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 /../../../../包括/ C ++ / 5.4.0 /比特/ predefined_ops.h :194:17:错误:二进制表达式的操作数无效         ('std :: pair'和'const(lambda at unordered_map.cpp:8:51)')           {return * __ it == _M_value; }

我在这里缺少什么?据我所知,这应该是一个有效的谓词搜索地图。

1 个答案:

答案 0 :(得分:6)

std::find函数用于在容器中查找。如果您有要使用的谓词,请使用std::find_if

参见例如this std::find and std::find_if reference