Ce face std::list::sort
std::sort din <algorithm> nu merge pe liste, așa că lista are propria funcție sort(). Ea sortează crescător (cu <) sau după un comparator dat de tine. Sortarea este stabilă: elementele egale își păstrează ordinea. Nu se copiază elemente și iteratorii rămân valizi, dar își schimbă poziția în listă.
reverse() inversează lista pe loc, tot doar prin schimbarea legăturilor.
Parametri
| Parametru | Descriere |
|---|---|
comparator |
Opțional: o funcție care primește două elemente și returnează true dacă primul trebuie să fie înainte. |
Ce returnează
Nimic (void).
Exemple
Exemplul 1: Sortare crescătoare, după comparator și inversare
La sortarea după lungime, size() numără octeți: „Iași” are 5, pentru că litera ș ocupă 2 octeți în UTF-8. „Cluj” și „Arad” au aceeași lungime și rămân în ordinea inițială (sortarea este stabilă).
#include <functional>
#include <list>
#include <print>
#include <string>
int main() {
std::list<int> note{8, 5, 10, 7, 9};
note.sort();
std::println("Crescător: {}", note);
note.sort(std::greater<int>());
std::println("Descrescător: {}", note);
std::list<std::string> orase{"Iași", "Cluj", "Timișoara", "Arad"};
orase.sort([](const std::string& a, const std::string& b) { return a.size() < b.size(); });
std::println("După lungime: {}", orase);
orase.reverse();
std::println("Inversat: {}", orase);
}
Rezultat
Crescător: [5, 7, 8, 9, 10]
Descrescător: [10, 9, 8, 7, 5]
După lungime: ["Cluj", "Arad", "Iași", "Timișoara"]
Inversat: ["Timișoara", "Iași", "Arad", "Cluj"]
Greșeli frecvente
- Comparatorul tău folosește
<=în loc de<. Un comparator trebuie să returnezefalsepentru elemente egale; altfel rezultatul este comportament nedefinit.
Comenzi înrudite
std::list: Listă dublu înlănțuită: inserare și ștergere rapidă oriunde, fără invalidarea celorlalte elemente, dar fără acces după poziție.std::list::splice: splice() mută noduri dintr-o listă în alta fără copiere; merge() interclasează două liste sortate.std::sort: Sortează elementele dintr-un interval, crescător sau după o regulă dată de tine.std::reverse: Inversează pe loc ordinea elementelor dintr-un interval.