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

比较函数应该接受两个参数,它们是优先级队列中元素的类型。你的元素的类型是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 回答