私はこの問題を何時間も悩まされていますが、私が見ていない簡単な解決策があると感じています。私は私が定義した構造体へのポインタのMinHeapを作成するためにpriority_queueを使用しようとしています。私の問題は、priority_queueテンプレートと一致させるために、この構造体へのポインタのために>演算子をオーバーロードしなければならないということです。これは私の最後のリゾートの試みで、私はそれを捨てて自分自身のヒープコードを書くことにする前に、stl priority_queueを使用しようとしています。構造体へのポインタの演算子のオーバーロードを回避するには? C++
私のコードの関連するスニペットがある:(i)の部分構造体の定義:
typedef struct Node Node;
struct Node
{
int frequency;
bool operator>(const Node& other) const{
return frequency > other.frequency;
}
};
(ⅱ)優先度キューの初期化:
priority_queue<Node*,vector<Node*>,greater<Node*> > q;
および(iii)の構築forループ初期ヒープ(int_array初期化されていると仮定):現在
for (int i = 0; i < SIZEOFINTARRAY; i++)
{
Node *n = new Node;
n->frequency = int_array[i];
q.push(n);
}
、THIの要素s "heap"はFIFOで返され、ソートは行われません。これは、優先度の比較でポインタと配列の前の要素がメモリ内にあるかどうかをチェックするためです。どのように私がこれを達成できるかについてのヒントを教えてください。
PS。この投稿がstackoverflowの標準に準拠していない場合は申し訳ありません(私はルールに従うように最善を尽くしましたが、それは私の最初の投稿です)。私はすべての批判を歓迎するので、私は再び同じミスを繰り返すことはできません。
なぜNodeをキューの値型として使用できないのですか?これはC++でタグ付けされているので、 'typedef struct Node Node;の必要はありません。また、構造体にも構造体が含まれているため、Node structに型を保存するためのコンストラクタを与えてください。 – stijn
@stijn私がここから除外したいくつかのNode *メンバー。これらのNode *メンバーはまた、後でコード内でキューを再構築する必要があるため(Nodeがコードをハフマンエンコーディングしている) – sebo
あなたがあなたのスワップを実装しても、ノード、いいえ?それがパフォーマンスの問題を引き起こしますか? – stijn