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() を同じ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 と同じ結果を生成するようにする
(関数)