std::is_sorted în C++

Verifică dacă elementele unui interval sunt deja în ordine crescătoare (sau după regula dată).

Sintaxă
bool is_sorted(ForwardIt first, ForwardIt last);
bool is_sorted(ForwardIt first, ForwardIt last, Compare comp);

Ce face std::is_sorted

std::is_sorted parcurge intervalul o singură dată și returnează true dacă fiecare element este cel puțin egal cu cel dinaintea lui. Un interval gol sau cu un singur element este considerat sortat.

Înrudit: std::is_sorted_until returnează iteratorul către primul element care strică ordinea.

Parametri

Parametru Descriere
first, last Intervalul verificat.
comp Opțional. Criteriul de ordine, de exemplu std::greater<>() pentru descrescător.

Ce returnează

true dacă intervalul este sortat, altfel false.

Exemple

Exemplul 1: Verificări simple

#include <algorithm>
#include <functional>
#include <print>
#include <vector>

int main() {
    std::vector<int> a{1, 3, 3, 8};
    std::vector<int> b{5, 2, 9};
    std::vector<int> c{10, 7, 4};

    std::println("a crescător: {}", std::is_sorted(a.begin(), a.end()));
    std::println("b crescător: {}", std::ranges::is_sorted(b));
    std::println("c descrescător: {}", std::ranges::is_sorted(c, std::greater<>()));
}

Rezultat

a crescător: true
b crescător: false
c descrescător: true

Exemplul 2: Unde se strică ordinea

#include <algorithm>
#include <print>
#include <vector>

int main() {
    std::vector<int> temperaturi{12, 14, 17, 15, 19};

    auto it = std::is_sorted_until(temperaturi.begin(), temperaturi.end());
    std::println("Ordinea se strică la poziția {} (valoarea {})", it - temperaturi.begin(), *it);
}

Rezultat

Ordinea se strică la poziția 3 (valoarea 15)

Greșeli frecvente

  • Apelezi std::is_sorted înainte de fiecare std::binary_search într-o buclă: verificarea parcurge tot vectorul și anulează avantajul căutării binare.

Comenzi înrudite

  • std::sort: Sortează elementele dintr-un interval, crescător sau după o regulă dată de tine.
  • std::binary_search: Verifică foarte rapid dacă o valoare există într-un interval deja sortat.
  • std::adjacent_find: Găsește prima pereche de elemente vecine egale (sau care îndeplinesc o condiție între ele).