std::collate<CharT>:: transform, do_transform
|
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) | |
do_transform
der am meisten abgeleiteten Klasse auf.
[
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) |