std::collate<CharT>:: transform, do_transform
From cppreference.net
C++
Text processing library
| Localization library | |||||||||||||||||||||||||
| Regular expressions library (C++11) | |||||||||||||||||||||||||
| Formatting library (C++20) | |||||||||||||||||||||||||
| Null-terminated sequence utilities | |||||||||||||||||||||||||
| Byte strings | |||||||||||||||||||||||||
| Multibyte strings | |||||||||||||||||||||||||
| Wide strings | |||||||||||||||||||||||||
| Primitive numeric conversions | |||||||||||||||||||||||||
|
|||||||||||||||||||||||||
| Text encoding identifications | |||||||||||||||||||||||||
|
|||||||||||||||||||||||||
Localization library
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
std::collate
| Member functions | ||||
|
collate::transform
collate::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) | |
1)
パブリックメンバー関数。最も派生したクラスの保護された仮想メンバー関数
do_transform
を呼び出す。
2)
文字シーケンス
[
low
,
high
)
を文字列に変換します。この文字列は、辞書順比較(例えば文字列に対する
operator<
を使用)によって、別の文字列に
transform()
を呼び出した結果と比較した場合、
do_compare()
を同じ2つの文字列に対して呼び出した場合と同じ結果を生成します。
目次 |
パラメータ
| 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
と同じ結果を生成するようにする
(関数) |