Namespaces
Variants

std::experimental::ranges:: lexicographical_compare

From cppreference.net
template < InputIterator I1, Sentinel < I1 > S1, InputIterator I2, Sentinel < I2 > S2,

class Proj1 = ranges:: identity , class Proj2 = ranges:: identity ,
class Comp = ranges:: less <> >
requires IndirectStrictWeakOrder < Comp, projected < I1, Proj1 > , projected < I2, Proj2 >>
bool lexicographical_compare ( I1 first1, S1 last1, I2 first2, S2 last2,
Comp comp = Comp { } ,

Proj1 proj1 = Proj1 { } , Proj2 proj2 = Proj2 { } ) ;
(1) (ranges TS)
template < InputRange R1, InputRange R2,

class Proj1 = ranges:: identity , class Proj2 = ranges:: identity ,
class Comp = ranges:: less <> >
requires IndirectStrictWeakOrder < Comp, projected < ranges:: iterator_t < R1 > , Proj1 > ,
projected < ranges:: iterator_t < R2 > , Proj2 >>
bool lexicographical_compare ( R1 && r1, R2 && r2, Comp comp = Comp { } ,

Proj1 proj1 = Proj1 { } , Proj2 proj2 = Proj2 { } ) ;
(2) (ranges TS)
1) Überprüft, ob der erste Bereich [ first1 , last1 ) lexikographisch kleiner als der zweite Bereich [ first2 , last2 ) ist. Elemente werden mit der gegebenen binären Vergleichsfunktion comp verglichen, nachdem sie mit proj1 bzw. proj2 projiziert wurden.
2) Gleich wie (1) , verwendet jedoch r1 als ersten Quellbereich und r2 als zweiten Quellbereich, als ob ranges:: begin ( r1 ) als first1 , ranges:: end ( r1 ) als last1 , ranges:: begin ( r2 ) als first2 , und ranges:: end ( r2 ) als last2 verwendet würde.

Lexikographischer Vergleich ist ein Vorgang mit den folgenden Eigenschaften:

  • Zwei Bereiche werden Element für Element verglichen.
  • Das erste nicht übereinstimmende Element definiert, welcher Bereich lexikographisch kleiner oder größer als der andere ist.
  • Wenn ein Bereich ein Präfix eines anderen ist, ist der kürzere Bereich lexikographisch kleiner als der andere.
  • Wenn zwei Bereiche äquivalente Elemente haben und dieselbe Länge besitzen, dann sind die Bereiche lexikographisch gleich .
  • Ein leerer Bereich ist lexikographisch kleiner als jeder nicht-leere Bereich.
  • Zwei leere Bereiche sind lexikographisch gleich .

Inhaltsverzeichnis

Parameter

first1, last1 - der erste Bereich der zu untersuchenden Elemente
r1 - der erste Bereich der zu untersuchenden Elemente
first2, last2 - der zweite Bereich der zu untersuchenden Elemente
r2 - der zweite Bereich der zu untersuchenden Elemente
comp - Vergleichsfunktion, die auf die projizierten Elemente angewendet wird
proj1 - Projektion, die auf die Elemente im ersten Bereich angewendet wird
proj2 - Projektion, die auf die Elemente im zweiten Bereich angewendet wird

Rückgabewert

true wenn der erste Bereich lexikographisch kleiner als der zweite ist.

Komplexität

Höchstens 2·min(N1, N2) Anwendungen der Vergleichsoperation, wobei N1 = last1 - first1 und N2 = last2 - first2 .

Mögliche Implementierung

template<InputIterator I1, Sentinel<I1> S1, InputIterator I2, Sentinel<I2> S2,
         class Proj1 = ranges::identity, class Proj2 = ranges::identity,
         class Comp = ranges::less<>>
    requires IndirectStrictWeakOrder<Comp, projected<I1, Proj1>, projected<I2, Proj2>>
bool lexicographical_compare(I1 first1, S1 last1, I2 first2, S2 last2,
                             Comp comp = Comp{}, 
                             Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{})
{
    for (; (first1 != last1) && (first2 != last2); (void) ++first1, (void) ++first2)
    {
        if (ranges::invoke(comp, ranges::invoke(proj1, *first1),
                                 ranges::invoke(proj2, *first2)))
            return true;
        if (ranges::invoke(comp, ranges::invoke(proj2, *first2),
                                 ranges::invoke(proj1, *first1)))
            return false;
    }
    return (first1 == last1) && (first2 != last2);
}
**Hinweis:** Der C++-Code innerhalb der `
`-Tags wurde gemäß den Anforderungen nicht übersetzt, da er Programmcode darstellt. Die HTML-Struktur und -Attribute bleiben ebenfalls unverändert.

Beispiel

Siehe auch

gibt true zurück, falls ein Bereich lexikographisch kleiner als ein anderer ist
(Funktions-Template)
bestimmt, ob zwei Elementgruppen identisch sind
(Funktions-Template)