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