Ich muss eine Prioritätswarteschlange für ein Projekt implementieren, aber die STL priority_queue
wird nicht angezeigt, da wir über alle Elemente iterieren und sie zufällig entfernen müssen.Implementieren einer Prioritätswarteschlange, die in C++ übersprungen werden kann
Wir denken über die Verwendung der STL set
dafür, um es in eine Klasse zu wickeln, um es zu einem ADT zu machen.
Gibt es dafür eine intelligentere Lösung?
Wie können wir es so machen, dass einige der öffentlichen Mitgliederfunktionen von set
öffentlich genutzt werden können? Wir interessieren uns für Iteratoren usw.
Offenbar die STL Ableitung wegen des Fehlens von virtuellen Destruktoren unklug ist:/
Neuer Code:
#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_ */
Also, wir haben derzeit Dies. Der Compiler beschwert sich nicht über Einsatz, aber es beschwert sich über erase(begin())
und return *begin()
:
there are no arguments to 'begin' that depend on a template parameter, so a declaration of 'begin' must be available
Warum ist das?
Sie sollten den Thread als Hausaufgabe markieren. – Pacane
Dies ist ein kleiner Teil eines viel größeren Projekts. Aber ich brauche keine Code-Antworten. –