std:: minmax_element
|
Défini dans l'en-tête
<algorithm>
|
||
|
template
<
class
ForwardIt
>
std::
pair
<
ForwardIt, ForwardIt
>
|
(1) |
(depuis C++11)
(constexpr depuis C++17) |
|
template
<
class
ExecutionPolicy,
class
ForwardIt
>
std::
pair
<
ForwardIt, ForwardIt
>
|
(2) | (depuis C++17) |
|
template
<
class
ForwardIt,
class
Compare
>
std::
pair
<
ForwardIt, ForwardIt
>
|
(3) |
(depuis C++11)
(constexpr depuis C++17) |
|
template
<
class
ExecutionPolicy,
class
ForwardIt,
class
Compare
>
std::
pair
<
ForwardIt, ForwardIt
>
|
(4) | (depuis C++17) |
Trouve le plus petit et le plus grand élément dans la plage
[
first
,
last
)
.
|
std:: is_execution_policy_v < std:: decay_t < ExecutionPolicy >> est true . |
(jusqu'à C++20) |
|
std:: is_execution_policy_v < std:: remove_cvref_t < ExecutionPolicy >> est true . |
(depuis C++20) |
Table des matières |
Paramètres
| first, last | - | la paire d'itérateurs définissant la plage d'éléments à examiner |
| policy | - | la politique d'exécution à utiliser |
| cmp | - |
objet fonction de comparaison (c'est-à-dire un objet qui satisfait aux exigences de
Compare
) qui renvoie
true
si le premier argument est
inférieur
au second.
La signature de la fonction de comparaison doit être équivalente à ce qui suit : bool cmp ( const Type1 & a, const Type2 & b ) ;
Bien que la signature n'ait pas besoin d'avoir
const
&
, la fonction ne doit pas modifier les objets qui lui sont passés et doit pouvoir accepter toutes les valeurs de type (éventuellement const)
|
| Exigences de type | ||
-
ForwardIt
doit satisfaire aux exigences de
LegacyForwardIterator
.
|
||
Valeur de retour
une paire constituée d'un itérateur vers le plus petit élément comme premier élément et d'un itérateur vers le plus grand élément comme second. Retourne std:: make_pair ( first, first ) si la plage est vide. Si plusieurs éléments sont équivalents au plus petit élément, l'itérateur vers le premier de ces éléments est retourné. Si plusieurs éléments sont équivalents au plus grand élément, l'itérateur vers le dernier de ces éléments est retourné.
Complexité
Étant donné N comme std:: distance ( first, last ) :
| 3 |
| 2 |
| 3 |
| 2 |
Exceptions
Les surcharges avec un paramètre de modèle nommé
ExecutionPolicy
signalent les erreurs comme suit :
-
Si l'exécution d'une fonction invoquée dans le cadre de l'algorithme lève une exception et que
ExecutionPolicyfait partie des politiques standard , std::terminate est appelé. Pour tout autreExecutionPolicy, le comportement est défini par l'implémentation. - Si l'algorithme ne parvient pas à allouer de la mémoire, std::bad_alloc est levé.
Implémentation possible
| minmax_element |
|---|
template<class ForwardIt> std::pair<ForwardIt, ForwardIt> minmax_element(ForwardIt first, ForwardIt last) { using value_type = typename std::iterator_traits<ForwardIt>::value_type; return std::minmax_element(first, last, std::less<value_type>()); } |
| minmax_element |
template<class ForwardIt, class Compare> std::pair<ForwardIt, ForwardIt> minmax_element(ForwardIt first, ForwardIt last, Compare comp) { auto min = first, max = first; if (first == last || ++first == last) return {min, max}; if (comp(*first, *min)) min = first; else max = first; while (++first != last) { auto i = first; if (++first == last) { if (comp(*i, *min)) min = i; else if (!(comp(*i, *max))) max = i; break; } else { if (comp(*first, *i)) { if (comp(*first, *min)) min = first; if (!(comp(*i, *max))) max = i; } else { if (comp(*i, *min)) min = i; if (!(comp(*first, *max))) max = first; } } } return {min, max}; } |
Notes
Cet algorithme diffère de std:: make_pair ( std:: min_element ( ) , std:: max_element ( ) ) , non seulement en efficacité, mais aussi en ce que cet algorithme trouve le dernier plus grand élément tandis que std::max_element trouve le premier plus grand élément.
Exemple
#include <algorithm> #include <iostream> int main() { const auto v = {3, 9, 1, 4, 2, 5, 9}; const auto [min, max] = std::minmax_element(begin(v), end(v)); std::cout << "min = " << *min << ", max = " << *max << '\n'; }
Sortie :
min = 1, max = 9
Voir aussi
|
renvoie le plus petit élément dans une plage
(modèle de fonction) |
|
|
renvoie le plus grand élément dans une plage
(modèle de fonction) |
|
|
(C++20)
|
renvoie les plus petits et les plus grands éléments dans une plage
(objet fonction algorithme) |