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