我需要爲項目實現優先級隊列,但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 2010-12-12 13:52:44
這是一個更大的項目的一小部分。但是當然,我不需要代碼的答案。 – 2010-12-12 13:53:40