I need to implement a priority queue for a project, but the STL\'s priority_queue
is not indicated since we need to iterate over all elements and remove them random
I would follow the example set by some of the other container adapters in the standard library use composition and make the type of the underlying container a template parameter. Though since it is a school project that might be too much flexibility. You might start by using composition with one of the existing Containers and build from there if necessary.
STL's set should be usable to make what you want, although I must note that the list of requirements looks a little strange. You could just define a new type.
template<typename T, template<typename X> class impl_type = std::set> class prio_queue {
typedef impl_type<T> set_type;
typedef typename set_type::iterator iterator;
// etc
public:
// Forward the set's members
T& top() {
return *begin();
}
// etc
};
You should be able to implement your own priority queue using std::vector
, std::make_heap
, std::push_heap
, and std::pop_heap
. Isn't this how std::priority_queue
is implemented? You'll just need to call std::make_heap
again to fix the data structure when you remove a random element.
Do you need to iterate over the elements in order? There's a std::sort_heap
algorithm to order the underlying std::vector
.
Do you really need a priority queue ?
You need iterate over all items and remove randomly -> linked list
If you need to keep the list sorted, sort it at the beginning and then, when inserting new item, use insertion sort (insert new item on right place).