7

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

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 函数..

4

1 回答 1

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 将函数的类型作为它的第三个模板参数,而构造函数则采用指向该函数本身的指针。

于 2013-03-09T05:36:54.480 回答