Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | locale‎ | collate
 
 
 
 
 
Definiert in 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 Member-Funktion, ruft die geschützte virtuelle Member-Funktion do_transform der am weitesten abgeleiteten Klasse auf.
2) Wandelt die Zeichensequenz [lowhigh) in einen String um, der beim lexikographischen Vergleich (z.B. mit operator< für Strings) mit dem Ergebnis des Aufrufs von transform() für einen anderen String, dasselbe Ergebnis liefert wie der Aufruf von do_compare() für dieselben beiden Strings.

Inhalt

[bearbeiten] Parameter

low - Zeiger auf das erste Zeichen in der zu transformierenden Sequenz
high - Einzeiger-Zeiger für die zu transformierende Sequenz

[bearbeiten] Rückgabewert

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

[bearbeiten] Hinweise

Zusätzlich zur Verwendung in der Kollation ist das implementierungsspezifische Format des transformierten Strings für std::regex_traits<>::transform_primary bekannt, das die Äquivalenzklasseninformationen extrahieren kann.

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

[bearbeiten] Siehe auch

transformiert einen String so, dass strcmp das gleiche Ergebnis wie strcoll liefert
(Funktion) [bearbeiten]
transformiert eine breite Zeichenkette so, dass wcscmp dasselbe Ergebnis wie wcscoll liefert
(Funktion) [bearbeiten]