class CodaPerPrimaGradiAlti<Marinaio> : private list<Marinaio>
{
public:
    CodaPerPrimaGradiAlti(const RegistroNavale& registro);
    
    // restituisce il prossimo marinaio da servire e lo elimina dalla coda
    Marinaio next();
    
    void push(const Marinaio& m);
    
private:
    RegistroNavale registro;
};

void Marinaio::push(const Marinaio& m)
{
    for(list<Marinaio>::iterator it = list<Marinaio>::begin(); it != list<Marinaio>::end(); it++)
    {
        if(m.ottieniGrado() > it->ottieniGrado())
        {
            list<Marinaio>::insert(it, m);
            return;
        }
    }
    
    list<Marinaio>::push_back(m);
}

