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;

しかし、そこでラムダ関数を使用できるかどうか疑問に思います。

4

1 に答える 1

19

最初にラムダを定義します。

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番目のテンプレート引数として関数の型を取りますが、コンストラクターはその関数自体へのポインターを取ります。

于 2013-03-09T05:36:54.480 に答える