Caso 4-4 Cola de mensajes de Windows (25 puntos) (configuración de prioridad de la cola de prioridad)

La cola de mensajes es la base del sistema Windows. Para cada proceso, el sistema mantiene una cola de mensajes. Si ocurre un evento específico durante el proceso, como un clic del mouse, un cambio de texto, etc., el sistema agregará este mensaje a la cola. Al mismo tiempo, si la cola no está vacía, el proceso obtiene cíclicamente mensajes de la cola según la prioridad. Tenga en cuenta que un valor de prioridad baja significa una prioridad alta. Edite el programa para simular la cola de mensajes, agregue mensajes a la cola y obtenga mensajes de la cola.

Formato de entrada: La
entrada primero da un número entero positivo N (≤10 5), y luego N líneas, cada línea da una instrucción: GET o PUT , lo que significa sacar el mensaje de la cola o agregar el mensaje a la cola, respectivamente. Si el comando es PUT, hay un nombre de mensaje y un número entero positivo que indica la prioridad del mensaje. Cuanto menor sea el número, mayor será la prioridad. El nombre del mensaje es una cadena de no más de 10 caracteres y sin espacios; el título garantiza que la prioridad del mensaje en la cola no se repite y la entrada tiene al menos un GET .

Formato de salida:
para cada instrucción GET , envíe el nombre y los parámetros del mensaje con la prioridad más alta en la cola de mensajes en una línea. Si no hay ningún mensaje en la cola de mensajes, la salida VACIARLO COLA! . No hay salida para la instrucción PUT .

Idea de la pregunta:
1. Esta pregunta usa el contenedor Priority_Queue en el contenedor STL. El archivo de encabezado es "cola". Cuando se usa la cola de prioridad, necesita restablecer la prioridad de los elementos en la cola de prioridad.
2. La configuración de prioridad se divide en tipos de datos básicos (cuanto mayores son los datos predeterminados, mayor es la prioridad) y tipos de datos de estructura (el "<" debe estar sobrecargado y se especifica que el compilador de sobrecarga ">" informará un error ).
3. Defina una función de amigo operador amigo <(Nodo a, Nodo b) {return a.num> b.num} en la estructura de esta pregunta Recuerde, es lo opuesto a sort sorting bool CMP () definido por nosotros mismos).

#include<iostream>
#include<queue>
#include<string>

using namespace std;
struct Node {
    
    
	string message;
	int num;
	friend bool operator<(Node a, Node b) {
    
     return a.num > b.num; }
};

int main()
{
    
    
	priority_queue<Node> que;
	Node t;
	string st;
	int n;
	cin >> n;
	ios::sync_with_stdio;	//这道题对时间的限制比较刁钻,第三个测试点有时过不去,问题不大,加上这句会好些。
	for (int i = 0; i < n; i++)
	{
    
    
		cin >> st;
		if (st[0] == 'P')
		{
    
    
			cin >> t.message >> t.num;
			que.push(t);
		}
		else
		{
    
    
			if (que.empty())
				cout << "EMPTY QUEUE!\n";
			else
			{
    
    
				cout << que.top().message << endl;
				que.pop();
			}
		}
	}
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/xdg15294969271/article/details/113948185
Recomendado
Clasificación