Namespaces
Variants

std::collate<CharT>:: compare, std::collate<CharT>:: do_compare

From cppreference.net
Definiert im Header <locale>
public :

int compare ( const CharT * low1, const CharT * high1,

const CharT * low2, const CharT * high2 ) const ;
(1)
protected :

virtual int do_compare ( const CharT * low1, const CharT * high1,

const CharT * low2, const CharT * high2 ) const ;
(2)
1) Öffentliche Memberfunktion, ruft die geschützte virtuelle Memberfunktion do_compare der am meisten abgeleiteten Klasse auf.
2) Vergleicht die Zeichenfolge [ low1 , high1 ) mit der Zeichenfolge [ low2 , high2 ) unter Verwendung der Kollationsregeln dieses Locales und gibt 1 zurück, wenn die erste Zeichenfolge der zweiten folgt, - 1 wenn die erste Zeichenfolge der zweiten vorausgeht, und Null wenn die beiden Zeichenfolgen äquivalent sind.

Inhaltsverzeichnis

Parameter

low1 - Zeiger auf das erste Zeichen der ersten Zeichenkette
high1 - Zeiger auf das Ende (exklusiv) der ersten Zeichenkette
low2 - Zeiger auf das erste Zeichen der zweiten Zeichenkette
high2 - Zeiger auf das Ende (exklusiv) der zweiten Zeichenkette

Rückgabewert

1 wenn die erste Zeichenkette größer als die zweite ist (d.h. der zweiten in der Sortierreihenfolge folgt), - 1 wenn die erste Zeichenkette kleiner als die zweite ist (der zweiten in der Sortierreihenfolge vorausgeht), null wenn die beiden Zeichenketten äquivalent sind.

Hinweise

Wenn ein Dreivergleich nicht erforderlich ist (wie bei der Übergabe eines Compare Arguments an Standardalgorithmen wie std::sort ), kann std::locale::operator() geeigneter sein.

Die Sortierreihenfolge ist die Wörterbuchreihenfolge: Die Position des Buchstabens im nationalen Alphabet (seine Äquivalenzklasse ) hat höhere Priorität als seine Groß-/Kleinschreibung oder Variante. Innerhalb einer Äquivalenzklasse werden Kleinbuchstaben vor ihren Großbuchstaben-Äquivalenten sortiert, und die sprachspezifische Reihenfolge kann für Zeichen mit diakritischen Zeichen gelten. In einigen Gebietsschemata vergleichen Zeichengruppen als einzelne Sortiereinheiten . Zum Beispiel folgt "ch" im Tschechischen auf "h" und geht vor "i" , und "dzs" im Ungarischen folgt auf "dz" und geht vor "g" .

Beispiel

#include <iostream>
#include <locale>
#include <string>
template<typename CharT>
void try_compare(const std::locale& l, const CharT* p1, const CharT* p2)
{
    auto& f = std::use_facet<std::collate<CharT>>(l);
    std::basic_string<CharT> s1(p1), s2(p2);
    if (f.compare(&s1[0], &s1[0] + s1.size(),
                  &s2[0], &s2[0] + s2.size()) < 0)
        std::wcout << p1 << " before " << p2 << '\n';
    else
        std::wcout << p2 << " before " << p1 << '\n';
}
int main()
{
    std::locale::global(std::locale("en_US.utf8"));
    std::wcout.imbue(std::locale());
    std::wcout << "In the American locale: ";
    try_compare(std::locale(), "hrnec", "chrt");
    std::wcout << "In the Czech locale: ";
    try_compare(std::locale("cs_CZ.utf8"), "hrnec", "chrt");
    std::wcout << "In the American locale: ";
    try_compare(std::locale(), L"år", L"ängel");
    std::wcout << "In the Swedish locale: ";
    try_compare(std::locale("sv_SE.utf8"), L"år", L"ängel");
}

Ausgabe:

In the American locale: chrt before hrnec
In the Czech locale: hrnec before chrt
In the American locale: ängel before år
In the Swedish locale: år before ängel

Siehe auch

vergleicht zwei Zeichenketten gemäß der aktuellen Locale
(Funktion)
vergleicht zwei Wide-Strings gemäß der aktuellen Locale
(Funktion)
vergleicht zwei Zeichenketten lexikografisch unter Verwendung des Collate-Facets dieser Locale
(öffentliche Elementfunktion von std::locale )