2013-03-26 45 views
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(); 
} 

我该如何按照'freq'进行排序?

+3

滑稽你应该问的是,这是字面上刚才问的时刻:http://stackoverflow.com/questions/15646451/stl-priority-queue-and-overloading-with-pointers – 2013-03-26 20:31:39

+1

@ShafikYaghmour可能是一些大学的任务。 – 2013-03-26 20:44:07

+0

@sftrabbit我看到它,它似乎与我的任务无关。如果我认识这个人,那会很有趣。 – 2013-03-26 20:46:28

回答

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; 
+0

如何在队列的main()中使用它? – 2013-03-26 20:33:39

+0

@AdegokeA我刚刚添加了一个例子。 – juanchopanza 2013-03-26 20:34:28

+0

为什么std :: vector 在那里?我尝试了priority_queue Q;并有错误。 – 2013-03-26 20:38:48