Share via


collate クラス

文字列内の文字の順序付けとグループ化、文字列内の文字の比較、および文字列のハッシュ化を制御するためのロケール ファセットとして使用できるオブジェクトを表すクラス テンプレート。

構文

template <class CharType>
class collate : public locale::facet;

パラメーター

CharType
文字をエンコードするためにプログラム内で使用される型。

解説

すべてのロケールのファセットと同様、静的オブジェクト ID に最初に格納されている値は 0 です。 格納されている値に初めてアクセスしようとすると、id に一意の正の値が格納されます。 一部の言語では、複数の文字が 1 文字のように処理され、また別の言語では、個々の文字が 2 文字であるかのように処理されます。 照合クラスが提供する照合サービスは、これらの状況で文字を並べ替える方法を示します。

コンストラクター

コンストラクター 説明
collate 文字列の並べ替え規則を処理するためにロケールのファセットとして機能する collate クラスのオブジェクトのコンストラクター。

Typedefs

型名 説明
char_type CharType 型の文字を表す型。
string_type basic_string 型の文字を格納する CharType 型の文字列を表す型。

メンバー関数

メンバー関数 説明
compare 等値または非等値のファセット固有の規則に従って、2 文字シーケンスを比較します。
do_compare 等値または非等値のファセット固有の規則に従って、2 文字シーケンスを比較するために呼び出される仮想関数。
do_hash ファセット固有の規則に従ってシーケンスのハッシュ値を決定するために呼び出される仮想関数。
do_transform ロケールの文字シーケンスを、同じロケールから同様に変換された他の文字シーケンスとの辞書式の比較で使用できる文字列に変換するために呼び出される仮想関数。
hash ファセット固有の規則に従ってシーケンスのハッシュ値を決定します。
transform ロケールの文字シーケンスを、同じロケールから同様に変換された他の文字シーケンスとの辞書式の比較で使用できる文字列に変換します。

必要条件

ヘッダー:<locale>

名前空間: std

collate::char_type

CharType 型の文字を表す型。

typedef CharType char_type;

解説

この型は、テンプレート パラメーター CharTypeのシノニムです。

collate::collate

文字列の並べ替え規則を処理するためにロケール ファセットとして機能する collate クラスのオブジェクトのコンストラクター。

public:
    explicit collate(
    size_t _Refs = 0);

protected:
    collate(
const char* _Locname,
    size_t _Refs = 0);

パラメーター

_Refs
オブジェクトのメモリ管理の種類を指定するために使用する整数値。

_Locname
ロケールの名前。

解説

_Refs パラメーターの可能な値とその重要性は次のとおりです。

  • 0: オブジェクトの有効期間はそれが含まれるロケールによって管理されます。

  • 1: オブジェクトの有効期間を手動で管理する必要があります。

  • > 1: これらの値は定義されていません。

コンストラクターは、locale::facet(_Refs) を使用して、その基本オブジェクトを初期化します。

collate::compare

等値または非等値のファセット固有の規則に従って、2 文字シーケンスを比較します。

int compare(const CharType* first1,
    const CharType* last1,
    const CharType* first2,
    const CharType* last2) const;

パラメーター

first1
比較する最初のシーケンスの最初の要素へのポインター。

last1
比較する最初のシーケンスの最後の要素へのポインター。

first2
比較する 2 番目のシーケンスの最初の要素へのポインター。

last2
比較する 2 番目のシーケンスの最後の要素へのポインター。

戻り値

このメンバー関数は、以下の値を返します。

  • 最初のシーケンスが 2 番目のシーケンスより小さい場合は、-1。

  • 2 番目のシーケンスが最初のシーケンスより小さい場合は、+1。

  • シーケンスが等しい場合は 0。

解説

シーケンスの最も早い等しくないペアにより小さい要素がある場合、または等しくないペアは存在しないが、最初のシーケンスの方が短い場合は、最初のシーケンスが小さいと見なされます。

このメンバー関数は、do_compare( first1, last1, first2, last2) を返します。

// collate_compare.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <tchar.h>
using namespace std;

int main() {
   locale loc ( "German_germany" );
   _TCHAR * s1 = _T("Das ist wei\x00dfzz."); // \x00df is the German sharp-s, it comes before z in the German alphabet
   _TCHAR * s2 = _T("Das ist weizzz.");
   int result1 = use_facet<collate<_TCHAR> > ( loc ).
      compare ( s1, &s1[_tcslen( s1 )-1 ],  s2, &s2[_tcslen( s2 )-1 ] );
   cout << result1 << endl;

   locale loc2 ( "C" );
   int result2 = use_facet<collate<_TCHAR> > ( loc2 ).
      compare (s1, &s1[_tcslen( s1 )-1 ],  s2, &s2[_tcslen( s2 )-1 ] );
   cout << result2 << endl;
}

collate::d o_compare

等値または非等値のファセット固有の規則に従って、2 文字シーケンスを比較するために呼び出される仮想関数。

virtual int do_compare(const CharType* first1,
    const CharType* last1,
    const CharType* first2,
    const CharType* last2) const;

パラメーター

first1
比較する最初のシーケンスの最初の要素へのポインター。

last1
比較する最初のシーケンスの最後の要素へのポインター。

first2
比較する 2 番目のシーケンスの最初の要素へのポインター。

last2
比較する 2 番目のシーケンスの最後の要素へのポインター。

戻り値

このメンバー関数は、以下の値を返します。

  • 最初のシーケンスが 2 番目のシーケンスより小さい場合は、-1。

  • 2 番目のシーケンスが最初のシーケンスより小さい場合は、+1。

  • シーケンスが等しい場合は 0。

解説

protected 仮想メンバー関数では、[ * first1, Last1)* のシーケンスと、[ first2, last2) のシーケンスを比較します。 値を比較する場合、CharType 型の対応する要素のペア間で operator< を適用します。 シーケンスの最も早い等しくないペアにより小さい要素がある場合、または等しくないペアは存在しないが、最初のシーケンスの方が短い場合は、最初のシーケンスが小さいと見なされます。

collate::compare の例 (do_compare を呼び出す) を参照してください。

collate::d o_hash

ファセット固有の規則に従ってシーケンスのハッシュ値を決定するために呼び出される仮想関数。

virtual long do_hash(const CharType* first, const CharType* last) const;

パラメーター

first
値を決定するシーケンスの最初の文字へのポインター。

last
値を決定するシーケンスの最後の文字へのポインター。

戻り値

シーケンスの long 型のハッシュ値。

解説

ハッシュ値は、リストの配列で擬似ランダムにシーケンスを分散させる場合などに役立ちます。

hash の例 (do_hash を呼び出す) を参照してください。

collate::d o_transform

ロケールの文字シーケンスを、同じロケールから同様に変換された他の文字シーケンスとの辞書式の比較で使用できる文字列に変換するために呼び出される仮想関数。

virtual string_type do_transform(const CharType* first, const CharType* last) const;

パラメーター

first
変換対象となるシーケンスの最初の文字へのポインター。

last
変換対象となるシーケンスの最後の文字へのポインター。

戻り値

変換された文字シーケンスである文字列。

解説

protected 仮想メンバー関数は、被制御シーケンスがシーケンス [ first, last) のコピーである string_type クラスのオブジェクトを返します。 collate<CharType> から派生したクラスで do_compare をオーバーライドする場合は、それに合わせて do_transform もオーバーライドする必要があります。 collate::compare に渡した場合、変換された 2 つの文字列の結果は、派生クラスで比較するために未変換文字列を渡した場合と同じものが生成される必要があります。

transform の例 (do_transform を呼び出す) を参照してください。

collate::hash

ファセット固有の規則に従ってシーケンスのハッシュ値を決定します。

long hash(const CharType* first, const CharType* last) const;

パラメーター

first
値を決定するシーケンスの最初の文字へのポインター。

last
値を決定するシーケンスの最後の文字へのポインター。

戻り値

シーケンスの long 型のハッシュ値。

解説

このメンバー関数は、do_hash( first, last) を返します。

ハッシュ値は、リストの配列で擬似ランダムにシーケンスを分散させる場合などに役立ちます。

// collate_hash.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <tchar.h>
using namespace std;

int main( )
{
   locale loc ( "German_germany" );
   _TCHAR * s1 = _T("\x00dfzz abc."); // \x00df is the German sharp-s (looks like beta), it comes before z in the alphabet
   _TCHAR * s2 = _T("zzz abc."); // \x00df is the German sharp-s (looks like beta), it comes before z in the alphabet

   long r1 = use_facet< collate<_TCHAR> > ( loc ).
      hash (s1, &s1[_tcslen( s1 )-1 ]);
   long r2 =  use_facet< collate<_TCHAR> > ( loc ).
      hash (s2, &s2[_tcslen( s2 )-1 ] );
   cout << r1 << " " << r2 << endl;
}
541187293 551279837

collate::string_type

basic_string 型の文字を格納する CharType 型の文字列を表す型。

typedef basic_string<CharType> string_type;

解説

この型は、オブジェクトにソース シーケンスのコピーを格納できるクラス テンプレート basic_string の特殊化を表します。

string_type の宣言および使用方法の例については、「collate::transform」を参照してください。

collate::transform

ロケールの文字シーケンスを、同じロケールから同様に変換された他の文字シーケンスとの辞書式の比較で使用できる文字列に変換します。

string_type transform(const CharType* first, const CharType* last) const;

パラメーター

first
変換対象となるシーケンスの最初の文字へのポインター。

last
変換対象となるシーケンスの最後の文字へのポインター。

戻り値

変換された文字シーケンスを含む文字列。

解説

このメンバー関数は、do_transform(first, last) を返します。

// collate_transform.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <tchar.h>
using namespace std;

int main( )
{
   locale loc ( "German_Germany" );
   _TCHAR* s1 = _T("\x00dfzz abc.");
   // \x00df is the German sharp-s (looks like beta),
   // it comes before z in the alphabet
   _TCHAR* s2 = _T("zzz abc.");

   collate<_TCHAR>::string_type r1;   // OK for typedef
   r1 = use_facet< collate<_TCHAR> > ( loc ).
      transform (s1, &s1[_tcslen( s1 )-1 ]);

   cout << r1 << endl;

   basic_string<_TCHAR> r2 = use_facet< collate<_TCHAR> > ( loc ).
      transform (s2, &s2[_tcslen( s2 )-1 ]);

   cout << r2 << endl;

   int result1 = use_facet<collate<_TCHAR> > ( loc ).compare
      (s1, &s1[_tcslen( s1 )-1 ],  s2, &s2[_tcslen( s2 )-1 ] );

   cout << _tcscmp(r1.c_str( ),r2.c_str( )) << result1
      << _tcscmp(s1,s2) <<endl;
}

-1-11

関連項目

<ロケール>
C++ 標準ライブラリ内のスレッド セーフ