Ce face std::less
Biblioteca are câte un obiect-funcție pentru fiecare operator: std::less (<), std::greater (>), std::plus (+), std::minus, std::multiplies, std::equal_to și altele. Sunt utile când un algoritm sau un container cere „o funcție de comparare” sau „o operație”.
std::less este comparatorul implicit pentru std::map, std::set și std::sort. Cu std::greater obții ordinea descrescătoare. Forma fără tip (std::greater<>{} sau std::greater{}, din C++14) deduce singură tipurile și este cea recomandată.
Ce returnează
less/greater returnează bool; plus returnează suma.
Exemple
Exemplul 1: Sortare descrescătoare și map ordonat invers
#include <algorithm>
#include <functional>
#include <map>
#include <print>
#include <string>
#include <vector>
int main() {
std::vector<int> note{7, 10, 5, 9};
std::sort(note.begin(), note.end(), std::greater{});
std::println("{}", note);
std::map<int, std::string, std::greater<>> clasament{{80, "Ana"}, {95, "Ion"}, {70, "Dan"}};
for (const auto& [puncte, nume] : clasament) {
std::println("{}: {}", nume, puncte);
}
}
Rezultat
[10, 9, 7, 5]
Ion: 95
Ana: 80
Dan: 70
Exemplul 2: std::plus cu accumulate și apeluri directe
#include <functional>
#include <numeric>
#include <print>
#include <vector>
int main() {
std::vector<double> cheltuieli{12.5, 40, 7.5};
double total = std::accumulate(cheltuieli.begin(), cheltuieli.end(), 0.0, std::plus<>{});
std::println("total: {} lei", total);
std::println("less(3, 5): {}", std::less<int>{}(3, 5));
std::println("greater(3, 5): {}", std::greater<int>{}(3, 5));
}
Rezultat
total: 60 lei
less(3, 5): true
greater(3, 5): false
Greșeli frecvente
- Scrii
std::sort(v.begin(), v.end(), std::greater<int>), fără acolade. Trebuie un obiect, nu un tip:std::greater<int>{}saustd::greater{}.
Comenzi înrudite
std::sort: Sortează elementele dintr-un interval, crescător sau după o regulă dată de tine.std::map: Dicționar ordonat: asociază fiecărei chei unice o valoare și păstrează cheile sortate.std::priority_queue: Coadă cu priorități: top() returnează mereu elementul cel mai mare (sau cel mai mic, cu std::greater).std::accumulate: Adună toate elementele unui interval pornind de la o valoare inițială (sau le combină cu o operație dată).std::hash: Obiect-funcție care transformă o valoare într-un număr (hash), folosit de unordered_map și unordered_set.