Namespaces
Variants

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

From cppreference.net
Definido en el encabezado <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) Función miembro pública, llama a la función miembro virtual protegida do_transform de la clase más derivada.
2) Convierte la secuencia de caracteres [ low , high ) a una cadena que, comparada lexicográficamente (por ejemplo, con operator< para cadenas) con el resultado de llamar transform() en otra cadena, produce el mismo resultado que llamar do_compare() en las mismas dos cadenas.

Contenidos

Parámetros

low - puntero al primer carácter en la secuencia a transformar
high - puntero una posición después del final para la secuencia a transformar

Valor de retorno

La cadena transformada de modo que la comparación lexicográfica de las cadenas transformadas pueda usarse en lugar de la comparación con intercalación de las originales. En la configuración regional "C", la cadena devuelta es una copia exacta de [ low , high ) . En otras configuraciones regionales, el contenido de la cadena devuelta está definido por la implementación, y el tamaño puede ser considerablemente mayor.

Notas

Además de su uso en la ordenación, el formato específico de la implementación de la cadena transformada es conocido por std::regex_traits<>::transform_primary , que es capaz de extraer la información de la clase de equivalencia.

Ejemplo

#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';
}

Salida:

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

Véase también

transforma una cadena de modo que strcmp produzca el mismo resultado que strcoll
(función)
transforma una cadena ancha de modo que wcscmp produzca el mismo resultado que wcscoll
(función)