Namespaces
Variants

std::ranges::is_sorted

Depuis fr.cppreference.net
 
 
Bibliothèque d'algorithmes
Algorithmes contraints et algorithmes sur plages (C++20)
Algorithmes contraints, p. ex. ranges::copy, ranges::sort, ...
Opérations de séquence non modificatrices    
Opérations par lots
(C++17)
Opérations de recherche
Opérations de séquence modificatrices
Opérations de copie
(C++11)
(C++11)
Opérations d'échange
Opérations de transformation
Opérations de génération
Opérations de suppression
Opérations de changement d'ordre
(jusqu'à C++17)(C++11)
(C++20)(C++20)
Opérations d'échantillonnage
(C++17)

Opérations de tri et connexes
Opérations de partitionnement
(C++11)    

Opérations de tri
Opérations de recherche binaire
(sur plages partitionnées)
Opérations d'ensemble (sur plages triées)
Opérations de fusion (sur plages triées)
Opérations de tas
Opérations de minimum/maximum
(C++11)
(C++17)
Opérations de comparaison lexicographique
Opérations de permutation


 
Algorithmes contraints
Tous les noms de ce menu appartiennent à l'espace de noms std::ranges
Opérations de séquence non modificatrices
Opérations de séquence modificatrices
Opérations de partitionnement
Opérations de tri
Opérations de recherche binaire (sur plages triées)
       
       
Opérations d'ensemble (sur plages triées)
Opérations de tas
Opérations de minimum/maximum
       
       
Opérations de permutation
Opérations de pliage
Opérations sur le stockage non initialisé
Types de retour
 
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 bool
    is_sorted( 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 bool
    is_sorted( R&& r, Comp comp = {}, Proj proj = {} );
(2) (depuis C++20)

Vérifie si les éléments de la plage [firstlast) sont triés dans un ordre non décroissant.

Une séquence est triée par rapport à un comparateur comp si pour tout itérateur it pointant vers la séquence et tout entier non négatif n tel que it + n est un itérateur valide pointant vers un élément de la séquence, std::invoke(comp, std::invoke(proj, *(it + n)), std::invoke(proj, *it)) est évalué à false.

1) Les éléments sont comparés à l'aide de la fonction de comparaison binaire donnée comp.
2) Identique à (1), mais utilise r comme plage source, comme si ranges::begin(r) était utilisé comme first et ranges::end(r) comme last.

Les entités de type fonction décrites sur cette page sont des objets de fonction d'algorithme (informellement appelés niebloids), c'est-à-dire :

Paramètres

first, last - la paire itérateur-sentinelle définissant la plage d'éléments à vérifier si elle est triée
r - la plage d'éléments à vérifier si elle est triée
comp - fonction de comparaison à appliquer aux éléments projetés
proj - projection à appliquer aux éléments

Valeur de retour

true si les éléments dans la plage sont triés selon comp .

Complexité

Linéaire en fonction de la distance entre first et last .

Implémentation possible

struct is_sorted_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 bool operator()(I first, S last, Comp comp = {}, Proj proj = {}) const
    {
        return ranges::is_sorted_until(first, last, comp, proj) == last;
    }
    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 bool operator()(R&& r, Comp comp = {}, Proj proj = {}) const
    {
        return (*this)(ranges::begin(r), ranges::end(r), std::ref(comp), std::ref(proj));
    }
};
inline constexpr is_sorted_fn is_sorted;

Notes

ranges::is_sorted renvoie true pour les plages vides et les plages de longueur un.

Exemple

#include <algorithm>
#include <array>
#include <functional>
#include <iostream>
#include <iterator>
int main()
{
    namespace ranges = std::ranges;
    std::array digits {3, 1, 4, 1, 5};
    ranges::copy(digits, std::ostream_iterator<int>(std::cout, " "));
    ranges::is_sorted(digits)
        ? std::cout << ": trié\n"
        : std::cout << ": non trié\n";
    ranges::sort(digits);
    ranges::copy(digits, std::ostream_iterator<int>(std::cout, " "));
    ranges::is_sorted(ranges::begin(digits), ranges::end(digits))
        ? std::cout << ": trié\n"
        : std::cout << ": non trié\n";
    ranges::reverse(digits);
    ranges::copy(digits, std::ostream_iterator<int>(std::cout, " "));
    ranges::is_sorted(digits, ranges::greater {})
        ? std::cout << ": trié (avec 'greater')\n"
        : std::cout << ": non trié\n";
}

Sortie :

3 1 4 1 5 : non trié
1 1 3 4 5 : trié
5 4 3 1 1 : trié (avec 'greater')

Voir aussi

trouve la plus grande sous-plage triée
(objet fonction d'algorithme)
(C++11)
vérifie si une plage est triée
(modèle de fonction)