std::collate<CharT>:: transform, do_transform
|
Определено в заголовке
<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
самого производного класса.
[
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
(функция) |