collate 類別
類別範本,描述可做為地區設定 Facet 的物件,以控制字串內字元的順序和群組、字串之間的比較和字串串哈希。
語法
template <class CharType>
class collate : public locale::facet;
參數
CharType
用於程式內部字元編碼的類型。
備註
如同所有地區設定 facet,靜態物件識別碼有初始儲存值零。 第一次嘗試存取其預存值時,會在 id
中儲存唯一的正值。 在某些語言中,字元視為單一字元群組及處理,而且在其他語言中,個別字元視為兩個字元。 collate 類別提供的定序服務提供排序這些案例的方式。
建構函式
建構函式 | 描述 |
---|---|
collate | 做為地區設定 facet 處理字串排序慣例之 collate 類別物件的建構函式。 |
Typedefs
類型名稱 | 描述 |
---|---|
char_type | 類型,描述 CharType 類型之字元。 |
string_type | 類型,描述包含 basic_string 類型字元的 CharType 類型字串。 |
成員函式
成員函數 | 描述 |
---|---|
compare | 根據其 facet 特定規則,比較兩個字元序列相等或不等。 |
do_compare | 虛擬函式,呼叫以根據其 facet 特定規則,比較兩個字元序列相等或不等。 |
do_hash | 虛擬函式,呼叫以根據其 facet 特定規則,決定序列的雜湊值。 |
do_transform | 虛擬函式,呼叫以將地區設定的字元序列轉換為字串,可用來與從相同地區設定轉換的其他字元序列進行語彙比較。 |
hash | 根據其 facet 特定規則,決定序列的雜湊值。 |
transform | 將地區設定的字元序列轉換為字串,可用來與從相同地區設定轉換的其他字元序列進行語彙比較。 |
需求
Header:<locale>
命名空間:std
collate::char_type
類型,描述 CharType
類型之字元。
typedef CharType char_type;
備註
此類型是範本參數 CharType
的同義字。
collate::collate
collate 類別物件的建構函式,可作為地區設定 Facet 以處理字串排序慣例。
public:
explicit collate(
size_t _Refs = 0);
protected:
collate(
const char* _Locname,
size_t _Refs = 0);
參數
_裁判
整數值,用來指定物件的記憶體管理類型。
_Locname
地區設定的名稱。
備註
_Refs 參數的可能值及其重要性如下:
0:物件的存留期由包含該物件的地區設定來管理。
1:物件的存留期必須以手動方式管理。
> 1:未定義這些值。
建構函式會使用 locale::facet(_Refs
) 初始化其基底物件。
collate::compare
根據其 facet 特定規則,比較兩個字元序列相等或不等。
int compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
參數
first1
要比較之第一個序列中第一個元素的指標。
last1
要比較之第一個序列中最後一個元素的指標。
first2
要比較之第二個序列中第一個元素的指標。
last2
要比較之第二個序列中最後一個元素的指標。
傳回值
成員函式會傳回下列值:
–1,表示第一個序列比第二個序列小。
+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
虛擬函式,呼叫以根據其 facet 特定規則,比較兩個字元序列相等或不等。
virtual int do_compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
參數
first1
要比較之第一個序列中第一個元素的指標。
last1
要比較之第一個序列中最後一個元素的指標。
first2
要比較之第二個序列中第一個元素的指標。
last2
要比較之第二個序列中最後一個元素的指標。
傳回值
成員函式會傳回下列值:
–1,表示第一個序列比第二個序列小。
+1,表示第二個序列比第一個序列小。
0,表示序列相等。
備註
受保護的虛擬成員函式會比較位於 [ * first1, Last1)* 的序列與 [first2, last2] 的順序。 它會在 型CharType
別的對應項目組之間套用 operator<
,藉以比較值。 第一個序列比較小,表示第一個序列具有序列中最早出現之不相等配對中較小的元素,或表示不相等配對存在,但第一個序列較短。
範例
請參閱 collate::compare 的範例,其會呼叫 do_compare
。
collate::d o_hash
虛擬函式,呼叫以根據其 facet 特定規則,決定序列的雜湊值。
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
要轉換之序列中最後一個字元的指標。
傳回值
字串,其為已轉換的字元序列。
備註
受保護的虛擬成員函式會傳回 string_type 類別的物件,其受控制的序列是 [ first
, last
) 序列的複本。 如果衍生自 collate<CharType> 的類別會覆寫do_compare,它也應該覆寫do_transform
以符合。 相較於傳遞要在衍生類別中比較的未轉換字串,若將兩個已轉換的字串傳遞至 collate::compare
,應該可以產生相同結果。
範例
請參閱 transform 的範例,其會呼叫 do_transform
。
collate::hash
根據其 facet 特定規則,決定序列的雜湊值。
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
的範例,請參閱 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