Allora ho una classe Clienti e un Elenco Clienti.
La classe Clienti è questa:
class clienti{
private:
char* Nome;
char* Cognome;
int CodiceCliente;
friend ostream& operator<<(ostream&,const clienti&);
friend istream& operator>>(istream&, clienti&);
public:
clienti(const char* N="",const char* C="", const int& CC=0);
clienti(const clienti&);
int& get_Codice(){return CodiceCliente;};
bool operator ==(const clienti&);
clienti& operator=(const clienti&);
~clienti(){delete[] Nome;delete[] Cognome;};
};
E un elenco clienti
struct record{
clienti elem;
record * next;
};
class elencoclienti{
private:
record* l;
public:
elencoclienti(){l=0;};
void Inserisci( clienti&); // inserisce un cliente nell'elenco
bool inElenco(const clienti&); // verifica la presenza di un cliente nell'elenco
void StampaElenco(); // visualizza il contenuto dell'elenco
};
Ora io ho già fatto l'ordinamento di interi della lista.
void elencoclienti::Inserisci(clienti& C){
if(l==0 || l->elem.get_Codice() > C.get_Codice()) {
record* q;
try{
q = new record;
}catch (std::bad_alloc& ba) {
cout<<"Errore di allocazione";
}
q->elem=C;
q->next=l;
l=q;
}else {
record* prec=l;
record* succ;
record* q;
try{
q = new record;
}catch (std::bad_alloc& ba) {
cout<<"Errore di allocazione";
}
q->elem=C;
q->next=0;
while(prec->next && prec->next->elem.get_Codice()<C.get_Codice() ) prec=prec->next;
succ=prec->next;
q->next=succ;
prec->next=q;
}
}
Se volessi fare l'ordinamento in base a Cognome, dovrei fare uno stream compare e poi spostare quello "maggiore" in un record temporaneo, giusto?