Мне нужно реализовать приоритетную очередь для проекта, но STL priority_queue
не указывается, поскольку нам нужно перебирать все элементы и удалять их случайным образом.
Мы думаем об использовании для этого набора STL
, обернув его в класс, чтобы сделать его 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 ()
:
нет аргументов для начала которые зависят от параметра шаблона, поэтому должно быть доступно объявление 'begin'
Почему это?