¿Cómo elimino todos los elementos de una cola de prioridad? Eso significa ¿cómo puedo destruir una cola de prioridad? avanzado gracias por su respuesta. ¿Hay algún método claro o borrado?método de limpieza de cola de prioridad
Respuesta
La interfaz priority_queue no tiene un método clear() (sin ninguna buena razón que alguna vez haya podido discernir). Una forma sencilla de limpiar es sólo para asignar una nueva, cola vacía:
priority_queue <int> q;
// use it
q = priority_queue <int>(); // reset it
Como cualquier referencia de STL de C++ le mostrará, la clase de cola de prioridad de STL no tiene una función como 'borrar' o 'borrar'. http://www.cplusplus.com/reference/stl/priority_queue/
Es una clase contenedor, y como tal, el compilador genera un destructor muy simple (en la mayoría de los casos). Si su cola de prioridad usa solo información asignada localmente en sus nodos, entonces esto debería funcionar bien para borrar la memoria.
Sin embargo, si ha asignado dinámicamente memoria para la información en su cola de prioridad, tendrá que crear manualmente una función de tipo 'borrar'.
Espero que esto ayude!
En C++ "estática" no es lo contrario de "dinámica". Los elementos en un PQ no se asignarán estáticamente. –
Ah - buena llamada en mi nombre inapropiado =) – bhilburn
priority_queue
no tiene un método claro. Puede ser que esto se deba a la simplicidad de la interfaz, o porque puede haber situaciones en las que los elementos se deben destruir en orden de prioridad, lo que hace que una función clara genérica no sea segura.
Independientemente, el siguiente bloque de código incluye dos funciones para borrar las colas de prioridad. El primero funciona construyendo una instancia temporal de una clase contenedora alrededor de la priority_queue y luego usándola para acceder al objeto de almacenamiento subyacente, que se supone que tiene un método clear()
. El segundo funciona reemplazando la priority_queue existente por una nueva cola.
Utilizo plantillas para que las funciones se puedan reciclar una y otra vez.
#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;
}
Aquí es un método limpio y sencillo para borrar cualquier priority_queue
(y queue
, y la mayoría de otros recipientes, así):
template <class Q>
void clearQueue(Q & q) {
q = Q();
}
Ya que es una plantilla, no tiene que recordar todo el parámetros de la plantilla.
Ejemplo:
std::priority_queue<MyType> simpleQueue;
std::priority_queue<MyType, std::deque<MyType>, MyHashFunction> customQueue;
// ... later ...
clearQueue(customQueue);
clearQueue(simpleQueue);
- 1. Java: cola de prioridad
- 2. C# cola de prioridad
- 3. Implementación de cola de prioridad de Brodal
- 4. Cola de prioridad de doble terminación
- 5. Par dentro de la cola de prioridad
- 6. ¿Estructura de cola de prioridad utilizada?
- 7. Cola de prioridad eliminar tiempo de complejidad
- 8. Implementación de cola de prioridad en C
- 9. Cambiar la prioridad en una cola de prioridad personalizada
- 10. Cola de prioridad concurrente en .NET 4.0
- 11. Servicio con cola de prioridad en Android
- 12. Base de datos de la Cola de prioridad
- 13. Eliminación de un elemento arbitrario de la cola de prioridad
- 14. Comparación de implementaciones de cola de prioridad en Haskell
- 15. ¿Una cola de prioridad que permite una actualización de prioridad eficiente?
- 16. ¿Cómo implementar una cola de prioridad de multiprocesamiento en Python?
- 17. ¿Tiene R una cola de prioridad como PriorityQueue de Java?
- 18. cola de prioridad de pares en orden inverso
- 19. Cola de prioridad de Java con un comparador anónimo personalizado
- 20. Repriorización de la cola de prioridad (manera eficiente)
- 21. Cola de prioridad con prioridades de elementos dinámicos
- 22. Eliminar un elemento de una cola de prioridad
- 23. cola de prioridad de STL - eliminar un elemento
- 24. Cola de prioridad de STL en la clase personalizada
- 25. ¿Java tiene una cola de prioridad mínima indexada?
- 26. Cola de prioridad STL con claves duplicadas: ¿es posible?
- 27. Interrumpir el tie en una cola de prioridad usando python
- 28. Microsoft Message Queue: indicador de prioridad o una cola separada?
- 29. RabbitMQ y prioridad de mensaje
- 30. Coleta de prioridad variable simultánea
esto funciona con cola, pero no con cola de prioridad. – russell
@russell ¿Qué te hace pensar eso? Todos los contenedores y adaptadores de la Biblioteca estándar son asignables. –
@Neil: si la cola de prioridad era un contenedor de punteros, ¿no debería el propietario eliminar cada elemento? – andand