c++ - 使用 lambda 函数在 std::unordered_map 中查找最小值

标签 c++ c++11 lambda unordered-map c++-standard-library

我试图在 map 中找到具有最小值的元素。例如,如果我的 map 有

 { (1, 12.3),(2, 6.51), (3, 1.24)}

我想找到元素 (3, 1.24)


我写了下面的代码,它试图用 lambda 格式写一个比较器

std::pair<int, double> min = *std::min_element(
    my_map.begin(), my_map.end(),
    [](std::unordered_map<int, double> a, std::unordered_map<int, double> b) { return a.second < b.second; });

但是我得到了以下错误:

error: no matching function for call to object of type '(lambda at my_code.cpp:118:9)'
            if (__comp(*__i, *__first))
                ^~~~~~
my_code.cpp:116:40: note: in instantiation of function template specialization 'std::__1::min_element<std::__1::__hash_map_iterator<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, double>, void *> *> >, (lambda at my_code.cpp:118:9)>' requested here
    std::pair<int, double> min = *std::min_element(
                                       ^
my_code.cpp:118:9: note: candidate function not viable: no known conversion from 'std::__1::__hash_map_iterator<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, double>, void *> *> >::value_type' (aka 'pair<const int, double>') to 'std::unordered_map<int, double>' for 1st argument
        [](std::unordered_map<int, double> a, std::unordered_map<int, double> b) { return a.second < b.second; });
        ^
my_code.cpp:118:9: note: conversion candidate of type 'void (*)(std::unordered_map<int, double>, std::unordered_map<int, double>)'
3 errors generated.

知道我做错了什么以及解决这个问题的正确方法是什么吗?谢谢!

最佳答案

你的 lambda 应该是二元谓词,它有两对 std::pair<const int, double> .

将 lambda 更改为如下:

std::pair<int, double> min = *std::min_element(
    my_map.begin(), my_map.end(),
    [](const auto &a, const auto &b) { return a.second < b.second; });

或更明确地说:

std::pair<int, double> min = *std::min_element(
    my_map.begin(), my_map.end(),
    [](const std::pair<const int, double> &a, const std::pair<const int, double> &b) { return a.second < b.second; });
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

关于c++ - 使用 lambda 函数在 std::unordered_map 中查找最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54451381/

相关文章:

c++ - 这是否提供自动内存管理以及内存控制? shared_ptr<unique_ptr<数据>>?

java - 在 Java Lambda 中返回二级列表

c# - 如何按日期时间对字典进行分组并对 int 求和

c++ - 继承结构的类型转换给出 g++ 编译错误

c++ - 我可以创建一个 auto_ptr 数组吗?

c++ - 在 C++ 中读取直接访问 Fortran 未格式化的文件

c# - 检测 LambdaExpression 是否用于对象的属性

c++ - 在现代 CMake 中定义预处理器

c++ - 使用复杂数据结构时内存泄漏( vector 数组的数组)

c++ - 类内部 lambda 和 boost 函数