È necessario implementare una coda di priorità per un progetto, ma il numero priority_queue
dell'STL non è indicato poiché è necessario iterare su tutti gli elementi e rimuoverli casualmente.Implementazione di una coda di priorità che può essere ripetuta in C++
Stiamo pensando di utilizzare l'STL set
per questo, inserendolo in una classe per renderlo un ADT.
C'è una soluzione più intelligente per questo?
Come possiamo rendere alcune delle funzioni di membro pubblico di set
possono essere utilizzate pubblicamente? Siamo interessati a iteratori, ecc
A quanto pare derivare lo STL è sconsigliabile a causa della mancanza di distruttori virtuali:/
Nuovo codice:
#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_ */
Quindi, attualmente abbiamo Questo. Il compilatore non si lamenta di inserimento, ma non si lamenta erase(begin())
e return *begin()
:
there are no arguments to 'begin' that depend on a template parameter, so a declaration of 'begin' must be available
Perché è questo?
È necessario contrassegnare il thread come un compito. – Pacane
Questa è una piccola parte di un progetto molto più grande. Ma certo, non ho bisogno di risposte in codice. –