节点的优先级队列

时间:2013-03-26 20:30:03

标签: c++ nodes priority-queue

我已经创建了节点的优先级队列,我已经将节点“推”到队列中,并假设它将按整数值的顺序对节点进行排序。我想我错了。该节点具有属性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();
}

如何按照'freq'的顺序排序?

1 个答案:

答案 0 :(得分:2)

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