Sortering af en vektor i C++

Forudsætninger: std::sort i C++ , vektor i C++ , initialisere en vektor i C++ .

CPP




// C++ program to sort a vector in non-decreasing> // order.> #include> using> namespace> std;> > int> main()> {> > vector <> int> >v{ 1, 5, 8, 9, 6, 7, 3, 4, 2, 0};> > > sort(v.begin(), v.end());> > > cout < <> 'Sorted '> ;> > for> (> auto> x : v)> > cout < < x < <> ' '> ;> > > return> 0;> }>

Produktion

Sorted 0 1 2 3 4 5 6 7 8 9 

Hvordan sorterer man i faldende rækkefølge?
sort() tager en tredje parameter, der bruges til at angive den rækkefølge, som elementer skal sorteres i. Vi kan sende funktionen greater() til at sortere i faldende rækkefølge. Denne funktion gør sammenligning på en måde, der sætter større elementer før.

CPP




// C++ program to sort a vector in non-increasing> // order.> #include> using> namespace> std;> > int> main()> {> > vector <> int> >v{ 1, 5, 8, 9, 6, 7, 3, 4, 2, 0};> > > sort(v.begin(), v.end(), greater <> int> >());> > > cout < <> 'Sorted '> ;> > for> (> auto> x : v)> > cout < < x < <> ' '> ;> > > return> 0;> }>

Produktion

Sorted 9 8 7 6 5 4 3 2 1 0 

Sådan sorteres i en bestemt rækkefølge?
Vi kan også skrive vores egen komparatorfunktion og videregive den som en tredje parameter.

Komparatorfunktionen kontrollerer, om sætningen returneret, er sand eller falsk og returnerer en bool-værdi, som sendes til sorteringsfunktionen.

Lad os f.eks. sige Interval i1 = { 6 , 8 } og Interval i2 = { 1, 9 }. Når dette overføres til komparatorfunktionen, sammenlignes det i1.start og i2.start . Siden, i1.start (=6) falsk . Det betyder, at Interval i1 ikke bør placeres før Interval i2. Nedenfor er koden til denne funktion.

CPP




// A C++ program to sort vector using> // our own comparator> #include> using> namespace> std;> > // An interval has start time and end time> struct> Interval {> > int> start, end;> };> > // Compares two intervals according to starting times.> bool> compareInterval(Interval i1, Interval i2)> {> > return> (i1.start } int main() { vector v { { 6, 8 }, { 1, 9 }, { 2, 4 }, { 4, 7 } }; // sort the intervals in increasing order of // start time sort(v.begin(), v.end(), compareInterval); cout < < 'Intervals sorted by start time : '; for (auto x : v) cout < < '[' < < x.start < < ', ' < < x.end < < '] '; return 0; }>

Produktion

Intervals sorted by start time : [1, 9] [2, 4] [4, 7] [6, 8] 

Hvordan sorterer man arrayet i faldende rækkefølge baseret på en eller anden parameter ved hjælp af en komparatorfunktion?

En komparatorfunktion kan overføres på en sådan måde, at elementerne i arrayet bliver sorteret i faldende rækkefølge.

C++




// A C++ program to sort vector using> // our own comparator> #include> using> namespace> std;> > // An interval has start time and end time> struct> Interval {> > int> start, end;> };> > // Compares two intervals according to ending times in descending order.> bool> compareInterval(Interval i1, Interval i2)> {> > return> (i1.end>i2.end);> }> > int> main()> {> > vector v { { 6, 8 }, { 1, 9 }, { 2, 4 }, { 4, 7 } };> > > // sort the intervals in decreasing order of> > // end time> > sort(v.begin(), v.end(), compareInterval);> > > cout < <> 'Intervals sorted by ending time in descending order : '> ;> > for> (> auto> x : v)> > cout < <> '['> < < x.start < <> ', '> < < x.end < <> '] '> ;> > > return> 0;> }>

Produktion

Intervals sorted by ending time in descending order : [1, 9] [6, 8] [4, 7] [2, 4] 

Relaterede artikler :
Sortering af en vektor af par | Sæt 1
Sortering af en vektor af par | Sæt 2