Ce face std::min_element
Aceste funcții parcurg intervalul o dată și returnează un iterator către element, nu valoarea. Valoarea o obții cu *it, iar poziția cu it - v.begin(). Dacă există mai multe elemente egale cu extremul, se returnează primul.
Pe un interval gol returnează last, așa că verifică dacă vectorul este gol. Cu un comparator sau, în C++20, cu o proiecție, poți căuta după un câmp al unei structuri.
Parametri
| Parametru | Descriere |
|---|---|
first, last |
Intervalul. |
comp |
Opțional. Funcția de comparare. |
Ce returnează
Iterator către elementul găsit, sau last pentru interval gol.
Exemple
Exemplul 1: Valoare și poziție
#include <algorithm>
#include <print>
#include <vector>
int main() {
std::vector<int> vanzari{120, 340, 95, 410, 230};
auto mic = std::min_element(vanzari.begin(), vanzari.end());
auto mare = std::max_element(vanzari.begin(), vanzari.end());
std::println("Cea mai slabă zi: ziua {} ({} lei)", mic - vanzari.begin() + 1, *mic);
std::println("Cea mai bună zi: ziua {} ({} lei)", mare - vanzari.begin() + 1, *mare);
}
Rezultat
Cea mai slabă zi: ziua 3 (95 lei)
Cea mai bună zi: ziua 4 (410 lei)
Exemplul 2: Cel mai ieftin produs (proiecție C++20)
#include <algorithm>
#include <print>
#include <string>
#include <vector>
struct Produs {
std::string nume;
double pret;
};
int main() {
std::vector<Produs> oferte{{"Telefon A", 1299.0}, {"Telefon B", 899.5}, {"Telefon C", 1049.0}};
auto it = std::ranges::min_element(oferte, {}, &Produs::pret);
std::println("{} la {:.2f} lei", it->nume, it->pret);
auto scump = std::max_element(oferte.begin(), oferte.end(),
[](const Produs& a, const Produs& b) { return a.pret < b.pret; });
std::println("Cel mai scump: {}", scump->nume);
}
Rezultat
Telefon B la 899.50 lei
Cel mai scump: Telefon A
Greșeli frecvente
- Faci
*std::max_element(v.begin(), v.end())pe un vector gol: dereferențieziend(), comportament nedefinit. - Pentru
max_elementscrii comparatorul cu>. Comparatorul spune mereu „mai mic decât”; cu>obții de fapt minimul.
Comenzi înrudite
std::minmax_element: Găsește într-o singură parcurgere atât cel mai mic, cât și cel mai mare element dintr-un interval.std::min: Returnează cea mai mică dintre două valori sau dintr-o listă de valori scrisă între acolade.std::max: Returnează cea mai mare dintre două valori sau dintr-o listă de valori scrisă între acolade.std::sort: Sortează elementele dintr-un interval, crescător sau după o regulă dată de tine.