std::min în C++

Returnează cea mai mică dintre două valori sau dintr-o listă de valori scrisă între acolade.

Sintaxă
const T& min(const T& a, const T& b);
T min(std::initializer_list<T> lista);  // C++11

Ce face std::min

std::min(a, b) returnează valoarea mai mică; dacă sunt egale, returnează prima. Din C++11 poți da o listă: std::min({a, b, c}).

Ambele argumente trebuie să aibă exact același tip: std::min(3, 2.5) nu compilează. Scrie tipul explicit, de exemplu std::min<double>(3, 2.5). Pentru elementul minim dintr-un container folosește std::min_element sau std::ranges::min(v).

Parametri

Parametru Descriere
a, b Valorile comparate (același tip).
lista Lista de valori între acolade.
comp Opțional (ultimul argument). Funcția de comparare.

Ce returnează

Cea mai mică valoare (prin referință pentru două argumente, prin copie pentru listă).

Exemple

Exemplul 1: Două valori și o listă

#include <algorithm>
#include <print>

int main() {
    int stoc = 14;
    int cerere = 20;
    std::println("Livrăm {} bucăți", std::min(stoc, cerere));

    std::println("Cel mai mic preț: {}", std::min({49, 35, 60, 42}));
    std::println("Cu tip explicit: {}", std::min<double>(3, 2.5));
}

Rezultat

Livrăm 14 bucăți
Cel mai mic preț: 35
Cu tip explicit: 2.5

Exemplul 2: Cel mai scurt nume, cu comparator

#include <algorithm>
#include <print>
#include <string>
#include <vector>

int main() {
    auto mai_scurt = [](const std::string& a, const std::string& b) { return a.size() < b.size(); };
    std::println("{}", std::min({std::string("Alexandra"), std::string("Ion"), std::string("Maria")}, mai_scurt));

    std::vector<int> v{7, 3, 9};
    std::println("Minim din vector: {}", std::ranges::min(v));
}

Rezultat

Ion
Minim din vector: 3

Greșeli frecvente

  • Amesteci tipuri: std::min(v.size(), 10) nu compilează (size_t și int). Scrie std::min(v.size(), size_t{10}).
  • Păstrezi rezultatul ca referință (const int& m = std::min(a + 1, b);): referința arată spre o valoare temporară deja distrusă.
  • Pe Windows, macro-urile min/max din <windows.h> strică apelul. Definește NOMINMAX sau scrie (std::min)(a, b).

Comenzi înrudite

  • std::max: Returnează cea mai mare dintre două valori sau dintr-o listă de valori scrisă între acolade.
  • std::minmax: Returnează dintr-un singur apel o pereche formată din cea mai mică și cea mai mare valoare.
  • std::min_element: Găsește cel mai mic (min_element) sau cel mai mare (max_element) element dintr-un interval și returnează un iterator.
  • std::clamp: Limitează o valoare la un interval: o aduce la minim dacă e prea mică și la maxim dacă e prea mare.