节点优先级队列

Priority Queue of Nodes

本文关键字:队列 优先级 节点      更新时间:2023-10-16

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

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();
}

我怎样才能使它按照"频率"的顺序排序?

你的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;