Реализация приоритетной очереди, которая может повторяться в C ++

Мне нужно реализовать приоритетную очередь для проекта, но 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'

Почему это?

5
задан Joel Coehoorn 9 December 2011 в 14:34
поделиться