如何将lambda用于容器比较运算符?

7 c++ c++11

这就是我将内置函数或新类用作自定义比较器的方法

priority_queue< int, vector<int>, greater<int> > third (myints,myints+4);

  // using mycomparison:
  priority_queue< int, vector<int>, mycomparison > q1;
class mycomparison
{ 
public: 
  bool operator() (const int& lhs, const int&rhs) const
  {
     return (lhs<rhs);
  }
};
  typedef priority_queue<int,vector<int>,mycomparison> q2;
Run Code Online (Sandbox Code Playgroud)

但我想知道我是否可以在那里使用lambda函数..

Tus*_*har 19

首先定义lambda:

auto compareFunc = [](int a, int b) { return a > b; };
Run Code Online (Sandbox Code Playgroud)

然后使用decltype:

typedef priority_queue<int, vector<int>, decltype(compareFunc)> q2;
Run Code Online (Sandbox Code Playgroud)

现在使用时q2,传递函数:

q2 myQueue(compareFunc);
Run Code Online (Sandbox Code Playgroud)

基本上,priority_queue将函数的类型作为第3个模板参数,而构造函数则获取指向该函数本身的指针.

  • 请注意,这需要创建一个必须与`q2`具有相同可见性的全局变量.因此,如果您需要`q2`在标题中,那么您还需要将此全局变量放在标题中.如果你想使用`auto`,这不是世界上最简单的事情. (5认同)
  • @Yola:我建议使用struct作为比较函数而不是lambda.在这里使用lambda没有任何好处. (2认同)