为什么下面的代码不能编译:
int main() {
map<int, int> m = { {1, 2}, {3, 4}};
auto p = std::min(m.begin(), m.end(), [](const map<int, int>::value_type& a, const map<int, int>::value_type& b) { return a.second < b.second;});
std::cout << (p->second) << std::endl;
}
错误是:
X.cc:11:114: note: main()::<lambda(const value_type&, const value_type&)>
X.cc:11:114: note: no known conversion for argument 1 from 'const std::_Rb_tree_iterator<std::pair<const int, int> >' to 'const value_type& {aka const std::pair<const int, int>&}'
我在这里做错了什么?如果那是一个 vector ,比如整数 vector ,我们就可以做到
[](int a, int b){return a<b;}
为什么我们不能在这里做同样的事情?
最佳答案
你想要std::min_element
而不是 std::min
.
关于在 map 上使用 lambda 时出现 C++11 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17752044/