0

我创建了一个节点的优先级队列,我已经将节点“推”到队列中,并假设它将按照整数值的顺序对节点进行排序。我想我错了。该节点具有属性 int freq 和 char c。我希望它按整数顺序排序,从最小到最大。

priority_queue<Node*> Q;
for(i =0; i< 95; i++){
    Q.push(node_array[i]);
}

for(i =0; i< 95; i++){
    cout<< Q.top() << endl;
    Q.pop();
}

我怎样才能让它按“频率”的顺序排序?

4

1 回答 1

3

您的 priority_queue 比较是比较指针,即内存地址。您需要提供一个节点比较二进制函子,它需要两个Node*并实现所需的逻辑:

struct node_cmp
{
   bool operator()( const Node* a, const Node* b ) const 
   {
    return a->someField < b->someField;
   }
};

使用它来实例化优先级队列:

std::priority_queue<Node*, std::vector<Node*>, node_cmp> Q;
于 2013-03-26T20:32:41.137 回答