在 map 上使用 lambda 时出现 C++11 编译错误

标签 c++ c++11 dictionary lambda

为什么下面的代码不能编译:

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/

相关文章:

c++ - 如何在 C++11 的成员函数中实现多态函数?

c++ - struct within-struct 初始化成员的统一初始化

android - 一个简单的图像弹出窗口

java - 如何从 JComboBox 获取文本?

C++ 用随机数填充数组且不重复

c++ - 从 5x10^8 个不同的数组元素中读取,每次 4 个字节

c++ - 如何将 Struct * 列表转换为 void * 列表?

java - 一对多关系中的 Hashmap 列表

c++ - Eclipse C/C++ "Permission Denied"错误

c++ - 使用 Qt 4 在 C++ 中设计模式