Как удалить все элементы из очереди приоритетов? Это означает, как я могу уничтожить очередь приоритетов? Спасибо за ваш ответ. Есть ли какой-либо метод очистки или стирания?метод очистки очереди приоритетов
ответ
Интерфейс priority_queue не имеет метода clear() (без уважительной причины, который я когда-либо мог распознать). Простой способ очистить его просто назначить новую пустую очередь:
priority_queue <int> q;
// use it
q = priority_queue <int>(); // reset it
Как показывает любая ссылка C++ STL, класс Queue Priority Queue не имеет функции «clear» или «erase». http://www.cplusplus.com/reference/stl/priority_queue/
Это класс контейнера, и в этом случае компилятор генерирует очень простой деструктор (в большинстве случаев). Если ваша очередь приоритетов использует только локально распределенную информацию в своих узлах, тогда это должно работать нормально для очистки памяти.
Однако, если у вас есть динамически выделенная память для информации в вашей очереди приоритетов, вам нужно будет вручную создать «ясную» функцию.
Надеюсь, это поможет!
В C++ "статические" не противоположность "динамический". Элементы в PQ не будут выделяться статически. – 2010-05-17 19:45:06
А - хороший звонок по моему неправильному значению =) – bhilburn
priority_queue
не имеет четкий метод. Возможно, это связано с простотой интерфейса или потому, что могут быть ситуации, в которых элементы должны быть уничтожены в приоритетном порядке, что делает нечеткую общую функцию очистки.
Независимо, следующий блок кода включает в себя две функции для очистки очередей приоритетов. Первый работает, создавая временный экземпляр класса-оболочки вокруг priority_queue, а затем используя это для доступа к базовому объекту хранения, который, как предполагается, имеет метод clear()
. Второй работает, заменив существующий priority_queue новой очередью.
Я использую шаблоны так, что функции могут быть повторно использованы снова и снова.
#include <queue>
#include <iostream>
using namespace std;
template <class T, class S, class C>
void clearpq(priority_queue<T, S, C>& q) {
struct HackedQueue : private priority_queue<T, S, C> {
static S& Container(priority_queue<T, S, C>& q) {
return q.*&HackedQueue::c;
}
};
HackedQueue::Container(q).clear();
}
template <class T, class S, class C>
void clearpq2(priority_queue<T, S, C>& q){
q=priority_queue<T, S, C>();
}
int main(){
priority_queue<int> testq, testq2;
//Load priority queue
for(int i=0;i<10;++i)
testq.push(i);
testq2=testq;
//Establish it is working
cout<<testq.top()<<endl;
testq.pop();
cout<<testq.top()<<endl;
testq.pop();
//Clear it and prove that it worked
clearpq(testq);
cout<<testq.size()<<endl;
//Use the second clearing function
cout<<testq2.size()<<endl;
clearpq2(testq2);
cout<<testq2.size()<<endl;
}
Вот чистый и простой метод, чтобы очистить любые priority_queue
(и queue
, и большинство других контейнеров, а):
template <class Q>
void clearQueue(Q & q) {
q = Q();
}
Поскольку это шаблон, вы не должны помнить все параметры шаблона.
Пример:
std::priority_queue<MyType> simpleQueue;
std::priority_queue<MyType, std::deque<MyType>, MyHashFunction> customQueue;
// ... later ...
clearQueue(customQueue);
clearQueue(simpleQueue);
- 1. Метод Peek для очереди приоритетов
- 2. Создание очереди приоритетов очереди STL?
- 3. Реализация очереди приоритетов
- 4. Куча реализации очереди приоритетов?
- 5. Изменение очереди приоритетов Minix3
- 6. Деревья и очереди приоритетов
- 7. Сортировка очереди очередей приоритетов
- 8. Реализация очереди приоритетов кучи
- 9. Вариант очереди приоритетов
- 10. Приоритеты в очереди приоритетов
- 11. Удаление в очереди приоритетов
- 12. Python Реализация очереди приоритетов
- 13. Создание очереди приоритетов python
- 14. Реализация очереди приоритетов PHP
- 15. Используется структура очереди приоритетов?
- 16. создание очереди приоритетов - C++
- 17. структура данных очереди приоритетов
- 18. Противоречие в очереди приоритетов
- 19. Почему метод очереди очистки AWS SQS недоступен?
- 20. Реализация интерфейса очереди приоритетов Java
- 21. Ресурсы для очереди приоритетов pagoda?
- 22. Реализация очереди приоритетов в Go
- 23. Случайный доступ в очереди приоритетов
- 24. Реализация очереди приоритетов в C#
- 25. Оператор перегрузки для очереди приоритетов
- 26. Алгоритм для разбитой очереди приоритетов
- 27. Удаление элемента из очереди приоритетов
- 28. Сериализация очереди приоритетов в scala
- 29. компаратор наихудшей очереди приоритетов эвристики
- 30. Создание очереди приоритетов через Multiset
это работает с очередью, но не с приоритетной очередью. – russell
@ russell Что заставляет вас думать об этом? Все контейнеры и адаптеры стандартной библиотеки могут быть назначены. – 2010-05-17 19:52:31
@Neil: Если приоритетная очередь была контейнером указателей, не должен ли владелец удалять каждый элемент? – andand