Как удалить елемент из очереди с приоритетом?

Нужно написать метод который будет удалять из очереди елемент с наивысшим приоритетом. Я придумал кое какую проверку на то какой елемент имеет наивысший приоритет но как именно удалить его я не знаю. Может есть какая-либо функция типа delete или какой-то алгоритм(кроме переписывания всех елементов за исключением того который нужно удалить)? Вот код который имеется:
template<typename Val, typename Priority>
inline void PriQueue<Val, Priority>::extract() {
    
    size_t biggestindex = 0;
    size_t highestpriority = 0;

    for (size_t i = 0; i < size ; i++)
    {
        if (queue[i].second < highestpriority)
        {
            biggestindex = i;
            highestpriority = queue[i].second;
        }
    }
}


А вот код класса:
template<typename Val, typename  Priority>
class PriQueue
{
private:
    size_t  size = 0;
    size_t capacity;
    size_t step;
    pair<Val, Priority>* queue;

public:
    PriQueue(size_t capacity = 10, size_t  step = 5);
    void add(const pair<Val, Priority>& p);
    void print() const;
    void extract();
};


Буду благодарен за любую помощь.
  • Вопрос задан
  • 290 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Очередь с приоритетом реализуется на основе кучи или бинарного дерева поиска (set). В первом случае удаление делается так: Меняете местами первый и последний элемент в куче. Удаляете последний. Потом просеиваете первый элемент вниз, чтобы он встал на свое место. Во втором случае надо просто удалить из сета элемент begin().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы