Cada tipo de vehiculo queda encolado aparte porque requeririan distinto combustible y/o condiciones especiales o sea.... tienes 4 tipos de vehiculos = colas, te explico:
Dentro de un bucle infinito del tipo while(true) tienes una funcion que genera vehiculos al azar con distintas caracteristicas (matrícula, marca, modelo, potencia, tipo,
hora_llegada, hora_salida, fecha, estado_ITV..) que puedes guardar en un objeto o struct Vehiculo. Digamos se generan asi:
moto, Yamaha, modelo......, potencia 200 cm3,....
moto,....,....
moto,....,....
moto,....,....
moto,....,....
moto,....,....
moto,....,....
vehiculo a gasolina, Ford, modelo T, ......
vehiculo diesel no-industrial
vehiculo diesel industrial
moto
...
El primero que generas tienes que atenderlo primero......... por eso usas una cola pero dentro de su categoria porque no puedes atender una moto más si tienes 20 encoladas (se asume que se puede atender 1 tipo de vehiculo a la vez y no mas)
Entonces.....
Verificas si la cola correspondiente (motos por ejemplo) esta vacia.. y si lo esta atiendes a ese vehiculo (moto). Sino esta vacia, atiendes al que espera en la cola y encolas al recien llegado. Algo asi:
#include <queue>
#include <stdexcept>
#include <stdlib.h> // srand, rand
#include <iostream>
#include <string>
#include <time.h>
using namespace std;
const unsigned short int G = 0;
const unsigned short int D = 1;
const unsigned short int M = 2;
const unsigned short int I = 3;
struct Vehicle{
int matricula; // según tu país puede ser numerico o no
string marca;
string modelo;
short unsigned int potencia;
//enum tipo {G, D, M, I};
unsigned short int tipo;
tm hora_llegada;
tm hora_salida;
tm fecha;
enum estado_ITV {BUENO, MALO, REGULAR};
};
void atender(Vehicle v);
Vehicle GeneraVehiculo();
void sleep(unsigned int mseconds);
int main(){
Vehicle v,vc;
queue<Vehicle> colas[4];
while(true)
{
v = GeneraVehiculo();
printf ("Ingresa vehiculo (tipo %d) de matricula %d\n",v.tipo,v.matricula);
if (colas[v.tipo].empty())
atender(v);
else
{
// atiendo a quien espera en cola
vc = colas[(int)v.tipo].front();
colas[(int)v.tipo].pop();
atender(vc);
colas[(int)v.tipo].push(v); // encolo al recien llegado
}
}
return 0;
}
void sleep(unsigned int mseconds)
{
clock_t goal = mseconds + clock();
while (goal > clock());
}
Te dejo la tarea de implementar GeneraVehiculo() y atender()