std::min
| Definido en el archivo de encabezado <algorithm>
|
||
template< class T > const T& min( const T& a, const T& b ); |
(1) | (constexpr desde C++14) |
template< class T, class Compare > const T& min( const T& a, const T& b, Compare comp ); |
(2) | (constexpr desde C++14) |
template< class T > T min( std::initializer_list<T> ilist ); |
(3) | (desde C++11) (constexpr desde C++14) |
template< class T, class Compare > T min( std::initializer_list<T> ilist, Compare comp ); |
(4) | (desde C++11) (constexpr desde C++14) |
Devuelve el menor de los valores dados.
a y b.operator< para comparar los valores.T no es LessThanComparable, el comportamiento no está definido.comp para comparar los valores.ilist.operator< para comparar los valores.T no es LessThanComparable, el comportamiento no está definido.comp para comparar los valores.Parámetros
| a, b | - | Los valores a comparar. |
| ilist | - | La lista de inicializadores con los valores a comparar. |
| comp | - | objeto función de comparación (es decir, un objeto que satisface los requerimientos de Compare) que devuelve true si a es menor que b . La signatura de la función de comparación deberá ser equivalente a lo siguiente:
Mientras que la signatura no necesita ser |
Valor de retorno
a y b. Si son equivalentes, devuelve a.ilist. Si varios valores son equivalentes al menor, devuelve el más a la izquierda.Complejidad
operator<.comp.ilist.size():operator<.comp.Posible implementación
| 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);
}
|
Notas
Capturar el resultado de std::min por referencia produce una referencia pendiente si uno de los parámetros es un temporal y ese parámetro se devuelve:
int n = 1;
const int& r = std::min(n-1, n+1);
// r es pendiente
Ejemplo
#include <algorithm>
#include <iostream>
#include <string_view>
int main()
{
std::cout << "El menor de 10 y 010 es " << std::min(10, 010) << '\n'
<< "El menor de 'd' y 'b' es '" << std::min('d', 'b') << "'\n"
<< "El más corto de \"foo\", \"bar\", y \"hello\" es \""
<< std::min({"foo", "bar", "hello"},
[](const std::string_view s1, const std::string_view s2)
{
return s1.size() < s2.size();
}) << "\"\n";
}
Salida:
El menor de 10 y 010 es 8
El menor de 'd' y 'b' es 'b'
El más corto de "foo", "bar", y "hello" es "foo"
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 281 | C++98 | Se requería que T fuera CopyConstructible para las sobrecargas (1,2).
|
No se requiere. |
| LWG 2239 | C++98 C++11 |
1. Se requería que T fuera LessThanComparable paralas sobrecargas (2) (C++98) y (4) (C++11) 2. Faltaba la complejidad de los requisitos. |
1. No se requiere. 2. Se añadieron los requisitos. |
Véase también
| Devuelve el mayor de dos elementos (plantilla de función) | |
(C++11) |
Devuelve el menor y el mayor de dos elementos. (plantilla de función) |
| Devuelve el elemento más pequeño de un rango. (plantilla de función) | |
(C++17) |
Restringe un valor entre un par de valores limitantes (plantilla de función) |
(C++20) |
Devuelve el menor de los valores dados (niebloid) |