std::ranges::min_element
| Défini dans l'en-tête <algorithm>
|
||
| Signature d'appel |
||
template< std::forward_iterator I, std::sentinel_for<I> S, class Proj = std::identity,
std::indirect_strict_weak_order<std::projected<I, Proj>> Comp = ranges::less >
constexpr I
min_element( I first, S last, Comp comp = {}, Proj proj = {} );
|
(1) | (depuis C++20) |
template< ranges::forward_range R, class Proj = std::identity,
std::indirect_strict_weak_order<
std::projected<ranges::iterator_t<R>, Proj>> Comp = ranges::less >
constexpr ranges::borrowed_iterator_t<R>
min_element( R&& r, Comp comp = {}, Proj proj = {} );
|
(2) | (depuis C++20) |
[first, last).r comme intervalle source, comme si on utilisait ranges::begin(r) comme first et ranges::end(r) comme last.Les entités de type fonction décrites sur cette page sont des objets fonction d'algorithme (informellement connus sous le nom de niebloids), c'est-à-dire :
- Les listes d'arguments template explicites ne peuvent pas être spécifiées lors de leur appel.
- Aucune d'entre elles n'est visible pour la recherche dépendante des arguments.
- Lorsque l'une d'elles est trouvée par recherche non qualifiée normale comme le nom à gauche de l'opérateur d'appel de fonction, la recherche dépendante des arguments est inhibée.
Paramètres
| first, last | - | la paire itérateur-sentinelle définissant l'intervalle des éléments à examiner |
| r | - |
la
range
à examiner
|
| comp | - | la comparaison à appliquer aux éléments projetés |
| proj | - | la projection à appliquer aux éléments |
Valeur de retour
Itérateur vers le plus petit élément de l'intervalle
[
first
,
last
)
. Si plusieurs éléments de l'intervalle sont équivalents au plus petit élément, retourne l'itérateur vers le premier de ces éléments. Retourne l'itérateur qui est égal à
last
si l'intervalle est vide (c'est-à-dire,
first
==
last
).
Complexité
Exactement max(N - 1, 0) comparaisons, où N = ranges:: distance ( first, last ) .
Implémentation possible
struct min_element_fn { template<std::forward_iterator I, std::sentinel_for<I> S, class Proj = std::identity, std::indirect_strict_weak_order<std::projected<I, Proj>> Comp = ranges::less> constexpr I operator()(I first, S last, Comp comp = {}, Proj proj = {}) const { if (first == last) return last; auto smallest = first; while (++first != last) if (std::invoke(comp, std::invoke(proj, *first), std::invoke(proj, *smallest))) smallest = first; return smallest; } template<ranges::forward_range R, class Proj = std::identity, std::indirect_strict_weak_order< std::projected<ranges::iterator_t<R>, Proj>> Comp = ranges::less> constexpr ranges::borrowed_iterator_t<R> operator()(R&& r, Comp comp = {}, Proj proj = {}) const { return (*this)(ranges::begin(r), ranges::end(r), std::ref(comp), std::ref(proj)); } }; inline constexpr min_element_fn min_element; |
Exemple
#include <algorithm> #include <array> #include <cmath> #include <iostream> int main() { namespace ranges = std::ranges; std::array v{3, 1, -13, 1, 3, 7, -13}; auto iterator = ranges::min_element(v.begin(), v.end()); auto position = ranges::distance(v.begin(), iterator); std::cout << "min element is v[" << position << "] == " << *iterator << '\n'; auto abs_compare = [](int a, int b) { return (std::abs(a) < std::abs(b)); }; iterator = ranges::min_element(v, abs_compare); position = ranges::distance(v.begin(), iterator); std::cout << "|min| element is v[" << position << "] == " << *iterator << '\n'; }
Sortie :
min element is v[2] == -13 |min| element is v[1] == 1
Voir aussi
|
(C++20)
|
retourne le plus grand élément dans une plage
(objet fonction algorithme) |
|
(C++20)
|
retourne les plus petits et plus grands éléments dans une plage
(objet fonction algorithme) |
|
(C++20)
|
retourne la plus grande des valeurs données
(objet fonction algorithme) |
|
retourne le plus petit élément dans une plage
(modèle de fonction) |