Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | locale‎ | collate
 
 
 
 
 
Definiert in 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 weitesten abgeleiteten Klasse auf.
2) Vergleicht die Zeichensequenz [low1high1) mit der Zeichensequenz [low2high2) unter Verwendung der Sortierregeln dieser Locale und gibt 1 zurück, wenn die erste Zeichenkette der zweiten folgt, -1, wenn die erste Zeichenkette der zweiten vorausgeht, und null, wenn die beiden Zeichenketten äquivalent sind.

Inhalt

[bearbeiten] Parameter

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

[bearbeiten] Rückgabewert

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

[bearbeiten] Hinweise

Wenn kein Drei-Wege-Vergleich erforderlich ist (z. B. bei der Angabe eines Compare-Arguments für 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 eine höhere Priorität als seine Groß- und Kleinschreibung oder Varianten. Innerhalb einer Äquivalenzklasse werden Kleinbuchstaben vor ihren Großbuchstaben-Entsprechungen sortiert, und die locale-spezifische Reihenfolge kann für Zeichen mit Diakritika gelten. In einigen Locales werden Zeichengruppen als einzelne *Sortiereinheiten* verglichen. Zum Beispiel folgt "ch" im Tschechischen auf "h" und geht "i" voraus, und "dzs" im Ungarischen folgt auf "dz" und geht "g" voraus.

[bearbeiten] 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

[bearbeiten] Siehe auch

vergleicht zwei Strings gemäß der aktuellen Locale
(Funktion) [bearbeiten]
vergleicht zwei breite Zeichenketten gemäß der aktuellen Locale
(Funktion) [bearbeiten]
Vergleicht lexikografisch zwei Zeichenketten mit der collate-Facet dieses Locales.
(public member function of std::locale) [bearbeiten]