Escribe un programa que simule un rúter de red (router). El rúter tiene un buffer interno implementado con una cola de prioridad de capacidad . Cada paquete de red tiene tres campos: una prioridad (entero), una dirección IP de origen (string) y una dirección IP de destino (string). Representamos un paquete con el struct siguiente:
struct Paquet {
int prioritat;
string origen, desti;
};
Para poder usar el pro2::Heap con el struct
Paquet, hay que definir el operador > de la
siguiente manera:
bool operator>(const Paquet& p1, const Paquet& p2) {
return p1.prioritat > p2.prioritat;
}
El rúter funciona así: mientras la cola de prioridad tiene menos de elementos, simplemente añade los paquetes entrantes a la cola. Cuando la cola está llena (tiene elementos), antes de añadir el nuevo paquete, el rúter saca el paquete con la prioridad más alta, lo escribe por el canal de salida, y después añade el nuevo paquete a la cola. Cuando ya no hay más paquetes de entrada, el rúter vacía la cola de prioridad escribiendo los paquetes restantes en orden de prioridad (de más alta a más baja).
La primera línea contiene un entero
(la capacidad del buffer del rúter). A continuación, una secuencia de
paquetes, uno por línea, cada uno con tres campos: prioridad (entero),
dirección IP de origen (string) y dirección IP de destino (string). Las
direcciones IP tienen el formato aaa.bbb.ccc.ddd.
Cada paquete que el rúter envía se muestra en una línea con el formato: prioridad, espacio, dirección de origen, espacio, dirección de destino.
Envía program.cc incluyendo "heap.hh".
Descarga los ficheros públicos (icono del gatito).
Input
3 5 192.168.1.1 10.0.0.1 2 172.16.0.1 192.168.1.2 8 10.0.0.5 172.16.0.3 3 192.168.1.5 10.0.0.2 1 10.0.0.3 172.16.0.1 7 172.16.0.5 192.168.1.3
Output
8 10.0.0.5 172.16.0.3 5 192.168.1.1 10.0.0.1 3 192.168.1.5 10.0.0.2 7 172.16.0.5 192.168.1.3 2 172.16.0.1 192.168.1.2 1 10.0.0.3 172.16.0.1