Mi chiedevo perché ci sono due approcci completamente diversi per specificare la funzione di confronto in qsort()
{versione C} rispetto allo std::sort()
.qsort() vs std :: sort, funzione di confronto differenza filosofica
qsort
richiede la funzione di confronto come di seguito: non conosco il motivo per cui ha bisogno di tre tipi di valori di ritorno -1, 0, +1.
int comp(int *x, int *y){
return *x - *y;
}
mentre la funzione di confronto per std::sort()
, che sembra più coerente a me, come è scritto in termini di funzione segue un invariante. cioè se x è minore di ritorno funzione y vero, x è nella giusta posizione rispetto alla y
bool comp(int x, int y){
return x < y;
}
Perché una tre valori -1,0, + 1 quando restituisce un bool (int o con due valori 0, 1) è molto più semplice e pulito?
Se si programma in C++, quindi utilizzare 'std :: sort', se si sta programmando in C quindi utilizzare' qsort'. Inoltre, alcuni contenitori C++ non possono essere ordinati con 'qsort', quindi non hai scelta. –
@JoachimPileborg le mie domande sono più legate al razionale dietro la funzione di confronto qsort(). Perché abbiamo bisogno di tre valori -1,0, + 1 quando restituire un valore bool (o int con due valori 0, 1) è molto più semplice e pulito. – David
Mi dispiace, avevo davvero torto con il mio approccio. Cancellato in modo da non confondere nessuno in futuro. – streppel