0

ノードの優先キューを作成し、ノードを整数値の順序で並べ替えることを想定して、ノードをキューに「プッシュ」しました。私は間違っていたと思います。ノードには、プロパティ、int freq、およびcharcがあります。最小から最大の順に、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();
}

'freq'の順序で並べ替えるにはどうすればよいですか?

4

1 に答える 1

3

priority_queueの比較は、ポインタ、つまりメモリアドレスを比較しています。Node*2つを取り、目的のロジックを実装するノード比較バイナリファンクタを提供する必要があります。

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 に答える