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