Namensräume
Varianten
Aktionen

std::experimental::ranges::less

Von cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
Allgemeine Dienstprogramme-Bibliothek
Hilfskomponenten
Funktionsobjekte
less
Metaprogrammierung und Typ-Traits
Getaggte Paare und Tupel
                          
Tag-Spezifizierer
                                      
                          
 
template< class T = void >

    erfordert StrictTotallyOrdered<T> ||
             Same<T, void> ||
             /* < auf zwei const T-Lvalues ruft einen eingebauten Operator auf, der Zeiger vergleicht */

struct less;
(Ranges TS)
template<>
struct less<void>;
(Ranges TS)

Funktionsobjekt für Vergleiche. Die primäre Template-Klasse ruft operator< auf const-Lvalues vom Typ T auf. Die Spezialisierung less<void> leitet die Parametertypen des Funktionsaufrufoperators aus den Argumenten ab (aber nicht den Rückgabetyp).

Alle Spezialisierungen von less sind Semiregular.

Inhalt

[bearbeiten] Member types

Mitgliedertyp Definition
is_transparent (nur Member der Spezialisierung less<void>) /* nicht spezifiziert */

[bearbeiten] Member functions

operator()
prüft, ob das erste Argument *kleiner* ist als das zweite
(öffentliche Memberfunktion)

std::experimental::ranges::less::operator()

constexpr bool operator()(const T& x, const T& y) const;
(1) (nur Member der primären less<T> Template-Klasse)
template< class T, class U >

    erfordert StrictTotallyOrderedWith<T, U> ||
             /* std::declval<T>() < std::declval<U>() löst auf zu
               einem eingebauten Operator, der Zeiger vergleicht */

constexpr bool operator()(T&& t, U&& u) const;
(2) (nur Member der Spezialisierung less<void>)
1) Vergleicht x und y. Äquivalent zu return ranges::less<>{}(x, y);.
2) Vergleicht t und u. Äquivalent zu return std::forward<T>(t) < std::forward<U>(u);, außer wenn dieser Ausdruck zu einem Aufruf eines eingebauten operator< aufgelöst wird, der Zeiger vergleicht.

Wenn ein Aufruf von (1) oder (2) einen eingebauten Operator aufrufen würde, der Zeiger vom Typ P vergleicht, wird das Ergebnis stattdessen wie folgt bestimmt:

  • Gibt true zurück, wenn der (möglicherweise konvertierte) Wert des ersten Arguments dem (möglicherweise konvertierten) Wert des zweiten Arguments in der implementierungsdefinierten strengen totalen Ordnung aller Zeigerwerte vom Typ P vorausgeht. Diese strenge totale Ordnung stimmt mit der partiellen Ordnung überein, die durch die eingebauten Operatoren <, >, <= und >= festgelegt wird.
  • Andernfalls wird false zurückgegeben.

Das Verhalten ist undefiniert, es sei denn, die Konversionssequenzen von sowohl T als auch U nach P sind gleichheitserhaltend (siehe unten).

[bearbeiten] Gleichheitserhaltung

Ein Ausdruck ist gleichheitserhaltend, wenn er bei gleichen Eingaben gleiche Ausgaben liefert.

  • Die Eingaben für einen Ausdruck bestehen aus seinen Operanden.
  • Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen von dem Ausdruck modifizierten Operanden (falls vorhanden).

Jeder Ausdruck, der gleichheitserhaltend sein muss, muss außerdem stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen gleiche Ausgaben liefern, solange keine explizite zwischenzeitliche Modifikation dieser Eingabeobjekte erfolgt.

[bearbeiten] Notes

Im Gegensatz zu std::less erfordert ranges::less, dass alle sechs Vergleichsoperatoren <, <=, >, >=, == und != gültig sind (gemäß den Constraints StrictTotallyOrdered und StrictTotallyOrderedWith).

[bearbeiten] Example

[bearbeiten] See also

Funktions-Objekt, das x < y implementiert
(Klassen-Template) [bearbeiten]