Namespaces
Variants

std::collate<CharT>:: transform, do_transform

From cppreference.net
Definiert im Header <locale>
public :
string_type transform ( const CharT * low, const CharT * high ) const ;
(1)
protected :
virtual string_type do_transform ( const CharT * low, const CharT * high ) const ;
(2)
1) Öffentliche Memberfunktion, ruft die geschützte virtuelle Memberfunktion do_transform der am meisten abgeleiteten Klasse auf.
2) Wandelt die Zeichenfolge [ low , high ) in einen String um, der bei lexikografischem Vergleich (z.B. mit operator< für Strings) mit dem Ergebnis des Aufrufs von transform() auf einem anderen String dasselbe Ergebnis liefert wie der Aufruf von do_compare() auf denselben beiden Strings.

Inhaltsverzeichnis

Parameter

low - Zeiger auf das erste Zeichen in der zu transformierenden Sequenz
high - Zeiger auf das Ende (exklusiv) für die zu transformierende Sequenz

Rückgabewert

Der String wird so transformiert, dass der lexikografische Vergleich der transformierten Strings anstelle der Kollation der Originale verwendet werden kann. Im "C"-Locale ist der zurückgegebene String eine exakte Kopie von [ low , high ) . In anderen Locales sind die Inhalte des zurückgegebenen Strings implementierungsdefiniert, und die Größe kann erheblich länger sein.

Hinweise

Zusätzlich zur Verwendung bei der Sortierung ist das implementationsspezifische Format der transformierten Zeichenkette std::regex_traits<>::transform_primary bekannt, welches in der Lage ist, die Äquivalenzklasseninformationen zu extrahieren.

Beispiel

#include <iomanip>
#include <iostream>
#include <locale>
int main()
{
    std::locale::global(std::locale("sv_SE.utf8"));
    auto& f = std::use_facet<std::collate<wchar_t>>(std::locale());
    std::wstring in1 = L"\u00e4ngel";
    std::wstring in2 = L"\u00e5r";
    std::wstring out1 = f.transform(&in1[0], &in1[0] + in1.size());
    std::wstring out2 = f.transform(&in2[0], &in2[0] + in2.size());
    std::wcout << "In the Swedish locale: ";
    if (out1 < out2)
        std::wcout << in1 << " before " << in2 << '\n';
    else
        std::wcout << in2 << " before " << in1 << '\n';
    std::wcout << "In lexicographic comparison: ";
    if (in1 < in2)
        std::wcout << in1 << " before " << in2 << '\n';
    else
        std::wcout << in2 << " before " << in1 << '\n';
}

Ausgabe:

In the Swedish locale: år before ängel
In lexicographic comparison: ängel before år

Siehe auch

transformiert einen String so, dass strcmp das gleiche Ergebnis wie strcoll liefern würde
(Funktion)
transformiert einen Wide-String so, dass wcscmp das gleiche Ergebnis wie wcscoll liefern würde
(Funktion)