2
struct node
{
node *right;
node *left;
int data;   
};

これは私の構造体ノードです。今、私は最小値を抽出するためにstl優先度キューを使用しています。つまり、このように優先度キューから最小値を抽出します。

    std::priority_queue<node*, std::vector<node*>, std::greater<node*> > mypq;

しかし、私は最小値を取得しておらず、グーグルで検索しました。それは(より大きい)、整数に使用され、別の答えを得て、このように実装しました

 struct compare  
 {  
 bool operator()(const node*& l, const node*& r)  
  {  
   return l > r;  
   }  
 };  

そして、私はこのように使用しました

  std::priority_queue<node*, std::vector<node*>,compare > mypq;

しかし、それは私がイライラしているエラーを示しています、どんな体も私を助けてください

4

3 に答える 3

3

比較関数は、優先キュー内の要素のタイプである2つの引数を取る必要があります。要素のタイプはnode*であるため、関数はとして定義する必要がありますbool operator()(node* l, node* r)。これで、これを考慮して比較関数を記述できます。

struct compare  
{  
  bool operator()(node* l, node* r)  
  {  
    return l->data > r->data;  
  }  
};  
于 2013-03-26T17:15:01.853 に答える
2
struct compare  
 {  
 bool operator()(const node*& l, const node*& r)  
  {  
   return l->data > r->data;  
   }  
 };
于 2013-03-26T17:14:19.160 に答える
1

data構造体のフィールドを使用して比較したい場合、このタイプのファンクターは機能するはずです。

struct compare  
{  
  bool operator()(const node* l, const node* r)  const
  {  
    return l->data > r->data;  
  }  
};

ここで、bool operator()それconstを呼び出すとその状態が変更されるべきではないためです。C ++標準では、これがconstメソッドである必要はありませんが、実装によってはそれが必要な場合があり、コンパイルエラーが発生します。

于 2013-03-26T17:18:28.930 に答える