Figurati . Ti ho citatato 'qsort' e 'bsearch' perché risultano estremamente utili nel caso in cui bisogna effettuare un ordinamento o una ricerca binaria su un array di qualsiasi tipo , anche di una struttura o classe implementata da te. Infatti questi due algoritmi utilizzano una funzione di comparazione definita in modo standard,ricevuta come parametro, così che l'ordinamento o la ricerca avvengono in base a ciò che la funzione da te scelta restituisce. La funzione di comparazione deve essere del tipo
int QualsiasiNomeFunzione(const void *a,const void *b)
ed essa deve restituire
a == b ----> valore nullo (0)
a > b ------> int >0 (es. 1)
a < b ------> int <0 (es. -1)
Usando una funzione di questo tipo, sei tu a decidere in base a quali criteri 'a' è minore, maggiore o uguale a 'b' . Nel tuo specifico caso, essendo l'ordinamento fatto solo sui vocaboli italiani, ed utilizzando la struttura da me precedentemente suggerita, si può usare 'qsort' ad esempio:
struct Parola{
string ita;
string eng;
};
int Compara_Ita(const void *a,const void *b){
Parola *lop = (Parola*)a; //casting da void* a Parola*
Parola *rop = (Parola*)b;
if(lop->ita == rop->ita) return 0; //se i vocaboli in 'ita' sono uguali ritorno un valore nullo
else if (lop->ita > rop->ita) return 1; //altrimenti se 'ita' di a è maggiore di 'ita' di b ritorno un valore positivo
else return -1; //altrimenti un valore negativo
}
int main(){
Parola dizionario[20]; //dichiaro un dizionario ita-eng di 20 elementi;
for(int i=0;i<20;i++){
cout<<"\n Vocabolo n."<<i+1;
cout<<"\n ita: ";cin.getline(dizionario[i].ita,100);
cout<<"\n eng: ";cin.getline(dizionario[i].eng,100);
}
//ordino il dizionario in ordine alfabetico su 'ita'
qsort(dizionario,20,sizeof(Parola),Compara_Ita);
}
Spero che ti abbia fatto capire un pò l'utilità di tali algoritmi