【发布时间】:2019-01-30 23:55:21
【问题描述】:
我正在尝试在地图中找到具有最小值的元素。例如,如果我的地图有
{ (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 从哈希映射中获取迭代器,而不是映射。您想比较两对值,而不是映射。
-
现在可以使用了。感谢您的帮助!
标签: c++ c++11 lambda unordered-map c++-standard-library