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

时间:2013-03-09 05:26:52

标签: 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;

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

1 个答案:

答案 0 :(得分:19)

首先定义lambda:

auto compareFunc = [](int a, int b) { return a > b; };

然后使用decltype:

typedef priority_queue<int, vector<int>, decltype(compareFunc)> q2;

现在当你使用q2时,传入函数:

q2 myQueue(compareFunc);

基本上,priority_queue将函数的类型作为第3个模板参数,而构造函数则接受指向该函数的指针。