プロジェクトの優先度キューを実装する必要がありますが、STLのpriority_queue
はすべての要素を反復処理してランダムに削除する必要があるため表示されません。C++で反復可能な優先度キューを実装する
私たちはSTLのset
を使って、これをクラスにラップしてADTにすることを考えています。
もっとスマートな解決策がありますか?
はどのように我々はそれがとてもset
の公開メンバ関数の一部が公に使用することができますすることができますか?私たちは、イテレータに興味を持っている、など
はどうやらSTLを導出するための仮想デストラクタの不足のは賢明ではありません:/
新コード:だから
#ifndef PRIORITYQUEUE_H_
#define PRIORITYQUEUE_H_
#include <set>
template<typename T, template<typename X> class impl_type = std::set>
class PriorityQueue {
typedef impl_type<T> set_type;
typedef typename set_type::iterator iterator;
public:
void push(const T& x) {
insert(x);
}
void pop() {
erase(begin());
}
const T& top() const {
return *begin();
}
};
#endif /* PRIORITYQUEUE_H_ */
、我々が現在持っていますこの。コンパイラは、インサート文句はありませんが、それはerase(begin())
とreturn *begin()
文句を言うん:
there are no arguments to 'begin' that depend on a template parameter, so a declaration of 'begin' must be available
これはなぜですか?
あなたは宿題としてスレッドにタグを付ける必要があります。 – Pacane
これははるかに大きなプロジェクトの小さな部分です。しかし確かに、私はコードの回答は必要ありません。 –