// ... (continuation of SortedSeqPriorityQueue)
void insertItem(const Key& k, const Element& e) { // insert into queue
if (S.isEmpty())
S.insertFirst(Item(k, e)); // if empty insert first
else if (comp(k, key(S.last())) > 0) // greater than last?
S.insertAfter(S.last(), Item(k,e)); // insert at end
else {
Position curr = S.first(); // start search
while (comp(k, key(curr)) > 0) // skip over small keys
curr = S.after(curr);
S.insertBefore(curr, Item(k,e)); // insert here
}
}
Element& minElement() // element with min key
throw(EmptyContainerException) {
if (S.isEmpty())
throw EmptyContainerException("Minimum element of empty queue");
else
return element(S.first());
}
const Key& minKey() const // returns minimum key
throw(EmptyContainerException) {
if (S.isEmpty())
throw EmptyContainerException("Minimum key of empty queue");
else
return key(S.first());
}
void removeMin() // remove minimum
throw(EmptyContainerException) {
if (S.isEmpty())
throw EmptyContainerException("Removal from empty queue");
S.remove(S.first());
}
};