共用方式為


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_transformfirstlast)。

範例

// 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++ 標準程式庫中的執行緒安全