Clase de contenedor C++<priority_queue>
En C++,<priority_queue>es parte de la biblioteca de plantillas estándar (STL) y se utiliza para implementar una cola de prioridad.
Una cola de prioridad es una cola especial que permite acceder rápidamente al elemento de mayor (o menor) prioridad de la cola.
En C++,priority_queuepor defecto es un montículo máximo, lo que significa que el elemento superior de la cola siempre tiene el valor más grande.
priority_queuees un adaptador de contenedor que proporciona operaciones de montículo sobre el contenedor subyacente. No proporciona iteradores ni admite acceso aleatorio.
Sintaxis
A continuación se muestrapriority_queuela sintaxis básica de:
#include <queue>
// 声明一个整型优先队列
priority_queue<int> pq;
// 声明一个自定义类型的优先队列,需要提供比较函数
struct compare {
bool operator()(int a, int b) {
return a > b; // 这里定义了最小堆
}
};
priority_queue<int, vector<int>, compare> pq_min;
Operaciones comunes
empty(): comprobar si la cola está vacía.size(): devolver el número de elementos de la cola.top(): devolver el elemento superior de la cola (sin eliminarlo).push(): agregar un elemento a la cola.pop(): eliminar el elemento superior de la cola.
Ejemplo
A continuación se muestrapriority_queueun ejemplo sencillo: crearemos un montículo máximo y mostraremos cómo agregar elementos y obtener el elemento superior de la cola.
Ejemplo
#include <queue>
int main() {
// Crear una cola de prioridad de enteros
std::priority_queue<int> pq;
// Agregar elementos a la cola de prioridad
pq.push(30);
pq.push(10);
pq.push(50);
pq.push(20);
// Mostrar los elementos de la cola
std::cout << "Elementos en la cola:" << std::endl;
while (!pq.empty()) {
std::cout << pq.top() << std::endl;
pq.pop();
}
return 0;
}
Resultado de salida:
队列中的元素: 50 30 20 10
Prioridad personalizada
Si necesitas un montículo mínimo, puedes lograrlo definiendo una función de comparación personalizada:
Ejemplo
#include <queue>
#include <vector>
struct compare {
bool operator()(int a, int b) {
return a > b; // Definir un montículo mínimo
}
};
int main() {
// Crear una cola de prioridad de tipo personalizado usando un montículo mínimo
std::priority_queue<int, std::vector<int>, compare> pq_min;
// Agregar elementos a la cola de prioridad
pq_min.push(30);
pq_min.push(10);
pq_min.push(50);
pq_min.push(20);
// Mostrar los elementos de la cola
std::cout << "Elementos en el montículo mínimo:" << std::endl;
while (!pq_min.empty()) {
std::cout << pq_min.top() << std::endl;
pq_min.pop();
}
return 0;
}
Resultado de salida:
最小堆中的元素: 10 20 30 50
<priority_queue>es un contenedor muy útil en el STL de C++, especialmente adecuado para escenarios donde se necesita acceder rápidamente al elemento de mayor o menor prioridad. Mediante una función de comparación personalizada, podemos implementar fácilmente un montículo máximo o mínimo. Espero que este artículo ayude a los principiantes a comprender y utilizar mejorpriority_queue。