std::min
| Défini dans l'en-tête <algorithm>
|
||
template< class T >
const T& min( const T& a, const T& b );
|
(1) | (constexpr depuis C++14) |
template< class T, class Compare >
const T& min( const T& a, const T& b, Compare comp );
|
(2) | (constexpr depuis C++14) |
template< class T >
T min( std::initializer_list<T> ilist );
|
(3) | (depuis C++11) (constexpr depuis C++14) |
template< class T, class Compare >
T min( std::initializer_list<T> ilist, Compare comp );
|
(4) | (depuis C++11) (constexpr depuis C++14) |
Retourne la plus petite des valeurs données.
a et b.operator< pour comparer les valeurs.T n'est pas LessThanComparable, le comportement est indéfini.comp pour comparer les valeurs.ilist.operator< pour comparer les valeurs.T n'est pas LessThanComparable, le comportement est indéfini.comp pour comparer les valeurs.Paramètres
| a, b | - | les valeurs à comparer |
| ilist | - | liste d'initialisation avec les valeurs à comparer |
| cmp | - | objet fonction de comparaison (c'est-à-dire un objet qui satisfait aux exigences de Compare) qui retourne true si a est inférieur à b.La signature de la fonction de comparaison doit être équivalente à ce qui suit :
Bien que la signature n'ait pas besoin d'avoir |
Valeur de retour
a et b. Si les valeurs sont équivalentes, retourne a.ilist. Si plusieurs valeurs sont équivalentes à la plus petite, retourne celle située le plus à gauche.Complexité
operator<.comp.ilist.size():operator<.comp.Implémentation possible
| min (1) |
|---|
template<class T>
const T& min(const T& a, const T& b)
{
return (b < a) ? b : a;
}
|
| min (2) |
template<class T, class Compare>
const T& min(const T& a, const T& b, Compare comp)
{
return (comp(b, a)) ? b : a;
}
|
| min (3) |
template<class T>
T min(std::initializer_list<T> ilist)
{
return *std::min_element(ilist.begin(), ilist.end());
}
|
| min (4) |
template<class T, class Compare>
T min(std::initializer_list<T> ilist, Compare comp)
{
return *std::min_element(ilist.begin(), ilist.end(), comp);
}
|
Notes
Capturer le résultat de std::min par référence produit une référence pendante si l'un des paramètres est une temporaire et que ce paramètre est retourné :
int n = -1;
const int& r = std::min(n + 2, n * 2); // r is dangling
Exemple
#include <algorithm>
#include <iostream>
#include <string_view>
int main()
{
std::cout << "smaller of 10 and 010 is " << std::min(10, 010) << '\n'
<< "smaller of 'd' and 'b' is '" << std::min('d', 'b') << "'\n"
<< "shortest of \"foo\", \"bar\", and \"hello\" is \""
<< std::min({"foo", "bar", "hello"},
[](const std::string_view s1, const std::string_view s2)
{
return s1.size() < s2.size();
}) << "\"\n";
}
Sortie :
smaller of 10 and 010 is 8
smaller of 'd' and 'b' is 'b'
shortest of "foo", "bar", and "hello" is "foo"
Rapports de défauts
Les rapports de défauts suivants, modifiant le comportement, ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement tel que publié | Comportement correct |
|---|---|---|---|
| LWG 281 | C++98 | T était requis d'être CopyConstructible pour les surcharges (1,2)
|
non requis |
| LWG 2239 | C++98 C++11 |
1. T était requis d'être LessThanComparable pourles surcharges (2) (C++98) et (4) (C++11) 2. les exigences de complexité manquaient |
1. non requis 2. ajouté les exigences |
Voir aussi
| retourne la plus grande des valeurs données (modèle de fonction & objet fonction d'algorithme) | |
(C++20) |
|
(C++11) |
retourne le plus petit et le plus grand de deux éléments (modèle de fonction & objet fonction d'algorithme) |
(C++20) |
|
| retourne le plus petit élément d'une plage (modèle de fonction & objet fonction d'algorithme) | |
(C++20) |
|
(C++17) |
limite une valeur entre une paire de valeurs limites (modèle de fonction & objet fonction d'algorithme) |
(C++20) |
|
(C++20) |
retourne la plus petite des valeurs données (objet fonction d'algorithme) |