Namespaces
Variants

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

From cppreference.net
Определено в заголовке <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) Открытая функция-член, вызывает защищенную виртуальную функцию-член do_transform самого производного класса.
2) Преобразует последовательность символов [ low , high ) в строку, которая при лексикографическом сравнении (например, с помощью operator< для строк) с результатом вызова transform() для другой строки, даёт тот же результат, что и вызов do_compare() для тех же двух строк.

Содержание

Параметры

low - указатель на первый символ в преобразуемой последовательности
high - указатель на позицию за последним символом преобразуемой последовательности

Возвращаемое значение

Строка преобразована таким образом, что лексикографическое сравнение преобразованных строк может использоваться вместо сопоставления оригиналов. В локали "C" возвращаемая строка является точной копией [ low , high ) . В других локалях содержимое возвращаемой строки определяется реализацией, а размер может быть значительно больше.

Примечания

Помимо использования в сортировке, специфичный для реализации формат преобразованной строки известен std::regex_traits<>::transform_primary , который способен извлекать информацию о классе эквивалентности.

Пример

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

Вывод:

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

Смотрите также

преобразует строку так, чтобы strcmp давал тот же результат, что и strcoll
(функция)
преобразует широкую строку так, чтобы wcscmp давал тот же результат, что и wcscoll
(функция)