collate — Klasa
Szablon klasy opisujący obiekt, który może służyć jako aspekt ustawień regionalnych do kontrolowania kolejności i grupowania znaków w ciągu, porównań między nimi i skrótów ciągów.
template <class CharType>
class collate : public locale::facet;
Typ char
Typ używany w programie do kodowania znaków.
Podobnie jak w przypadku dowolnego zestawu reguł ustawień regionalnych, identyfikator obiektu statycznego ma początkową przechowywaną wartość zero. Pierwsza próba uzyskania dostępu do przechowywanej wartości przechowuje unikatową wartość dodatnią w pliku id
. W przypadku niektórych języków znaki są grupowane i traktowane jak pojedynczy znak, a w innych, pojedyncze znaki są traktowane tak, jakby były dwoma znakami. Usługi sortowania dostarczane przez klasę collate umożliwiają sortowanie w tych przypadkach.
Konstruktor | opis |
---|---|
Collate | Konstruktor dla obiektów klasy collate , która służy jako aspekt ustawień regionalnych do obsługi konwencji sortowania ciągów. |
Nazwa typu | opis |
---|---|
char_type | Typ opisujący znak typu CharType . |
string_type | Typ opisujący ciąg typu basic_string zawierający znaki typu CharType . |
Funkcja składowa | opis |
---|---|
porównywać | Porównuje dwie sekwencje znaków zgodnie z ich zasadami równości i nierówności specyficznymi dla zestawów reguł. |
do_compare | Funkcja wirtualna porównująca dwie sekwencje znaków zgodnie z ich zasadami równości i nierówności specyficznymi dla zestawów reguł. |
do_hash | Funkcja wirtualna wywoływana w celu określenia wartości mieszania sekwencji zgodnie z ich zasadami specyficznymi dla zestawów reguł. |
do_transform | Funkcja wirtualna wywoływana w celu konwersji sekwencji znaków z ustawień regionalnych na ciąg znaków, który może być używany w porównaniach leksykograficznych z innymi sekwencjami znaków podobnie przekonwertowanymi z tych samych ustawień regionalnych. |
hasz | Określa wartość mieszania sekwencji zgodnie z ich zasadami specyficznymi dla zestawów reguł. |
przekształcać | Konwertuje sekwencję znaków z ustawień regionalnych na ciąg znaków, który może być używany w porównaniach leksykograficznych z innymi sekwencjami znaków podobnie przekonwertowanymi z tych samych ustawień regionalnych. |
Nagłówek:<ustawienia regionalne>
Przestrzeń nazw: std
Typ opisujący znak typu CharType
.
typedef CharType char_type;
Typ jest synonimem parametru CharType
szablonu .
Konstruktor obiektów klasy sortowania, który służy jako aspekt ustawień regionalnych do obsługi konwencji sortowania ciągów.
public:
explicit collate(
size_t _Refs = 0);
protected:
collate(
const char* _Locname,
size_t _Refs = 0);
_Bibl.
Wartość całkowita używana do określania typu zarządzania pamięcią dla obiektu.
_Locname
Nazwa ustawień regionalnych.
Możliwe wartości parametru _Refs i ich istotności to:
0: Okres istnienia obiektu jest zarządzany przez ustawienia regionalne, które go zawierają.
1: Okres istnienia obiektu musi być zarządzany ręcznie.
> 1: Te wartości nie są zdefiniowane.
Konstruktor inicjuje obiekt podstawowy za pomocą ustawień regionalnych::facet(_Refs
).
Porównuje dwie sekwencje znaków zgodnie z ich zasadami równości i nierówności specyficznymi dla zestawów reguł.
int compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
first1
Wskaźnik do pierwszego elementu w pierwszej sekwencji do porównania.
last1
Wskaźnik do ostatniego elementu w pierwszej sekwencji do porównania.
first2
Wskaźnik do pierwszego elementu w drugiej sekwencji do porównania.
last2
Wskaźnik do ostatniego elementu w drugiej sekwencji do porównania.
Funkcja składowa zwraca:
-1, jeśli pierwsza sekwencja porównuje mniej niż druga sekwencja.
+1, jeśli druga sekwencja porównuje mniej niż pierwsza sekwencja.
0, jeśli sekwencje są równoważne.
Pierwsza sekwencja porównuje mniej, jeśli ma mniejszy element najwcześniejszej nierównej pary w sekwencjach lub, jeśli nie istnieją nierówne pary, ale pierwsza sekwencja jest krótsza.
Funkcja składowa zwraca 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;
}
Funkcja wirtualna porównująca dwie sekwencje znaków zgodnie z ich zasadami równości i nierówności specyficznymi dla zestawów reguł.
virtual int do_compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
first1
Wskaźnik do pierwszego elementu w pierwszej sekwencji do porównania.
last1
Wskaźnik do ostatniego elementu w pierwszej sekwencji do porównania.
first2
Wskaźnik do pierwszego elementu w drugiej sekwencji do porównania.
last2
Wskaźnik do ostatniego elementu w drugiej sekwencji do porównania.
Funkcja składowa zwraca:
-1, jeśli pierwsza sekwencja porównuje mniej niż druga sekwencja.
+1, jeśli druga sekwencja porównuje mniej niż pierwsza sekwencja.
0, jeśli sekwencje są równoważne.
Chroniona funkcja wirtualnego elementu członkowskiego porównuje sekwencję [ * first1, Last1)* z sekwencją [ first2, last2). Porównuje wartości, stosując operator<
pary odpowiadających im elementów typu CharType
. Pierwsza sekwencja porównuje mniej, jeśli ma mniejszy element najwcześniejszej nierównej pary w sekwencjach lub jeśli nie istnieją nierówne pary, ale pierwsza sekwencja jest krótsza.
Zobacz przykład sortowania::compare, który wywołuje metodę do_compare
.
Funkcja wirtualna wywoływana w celu określenia wartości mieszania sekwencji zgodnie z ich zasadami specyficznymi dla zestawów reguł.
virtual long do_hash(const CharType* first, const CharType* last) const;
pierwszy
Wskaźnik do pierwszego znaku w sekwencji, którego wartość ma zostać określona.
ostatni
Wskaźnik do ostatniego znaku w sekwencji, którego wartość ma zostać określona.
Wartość skrótu typu long
dla sekwencji.
Wartość skrótu może być przydatna, na przykład w przypadku rozkładania sekwencji pseudo-losowo na tablicę list.
Zobacz przykład skrótu, który wywołuje metodę do_hash
.
Funkcja wirtualna wywoływana w celu konwersji sekwencji znaków z ustawień regionalnych na ciąg znaków, który może być używany w porównaniach leksykograficznych z innymi sekwencjami znaków podobnie przekonwertowanymi z tych samych ustawień regionalnych.
virtual string_type do_transform(const CharType* first, const CharType* last) const;
pierwszy
Wskaźnik do pierwszego znaku w sekwencji, który ma zostać przekonwertowany.
ostatni
Wskaźnik do ostatniego znaku w sekwencji, który ma zostać przekonwertowany.
Ciąg, który jest przekształconą sekwencją znaków.
Chroniona funkcja wirtualna składowa zwraca obiekt klasy string_type , którego kontrolowana sekwencja jest kopią sekwencji [ first
, last
). Jeśli klasa pochodząca z collate<CharType> zastępuje do_compare, należy również zastąpić do_transform
dopasowanie. Po przekazaniu do collate::compare
metody dwa przekształcone ciągi powinny zwracać ten sam wynik, który można uzyskać od przekazania nieprzetłumaczonych ciągów do porównania w klasie pochodnej.
Zobacz przykład przekształcenia, który wywołuje metodę do_transform
.
Określa wartość mieszania sekwencji zgodnie z ich zasadami specyficznymi dla zestawów reguł.
long hash(const CharType* first, const CharType* last) const;
pierwszy
Wskaźnik do pierwszego znaku w sekwencji, którego wartość ma zostać określona.
ostatni
Wskaźnik do ostatniego znaku w sekwencji, którego wartość ma zostać określona.
Wartość skrótu typu long
dla sekwencji.
Funkcja składowa zwraca do_hash( first
, last
).
Wartość skrótu może być przydatna, na przykład w przypadku rozkładania sekwencji pseudo-losowo na tablicę list.
// 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
Typ opisujący ciąg typu basic_string
zawierający znaki typu CharType
.
typedef basic_string<CharType> string_type;
Typ opisuje specjalizację szablonu klasy basic_string , którego obiekty mogą przechowywać kopie sekwencji źródłowej.
Aby zapoznać się z przykładem sposobu deklarowania i używania metody string_type
, zobacz przekształcanie.
Konwertuje sekwencję znaków z ustawień regionalnych na ciąg znaków, który może być używany w porównaniach leksykograficznych z innymi sekwencjami znaków podobnie przekonwertowanymi z tych samych ustawień regionalnych.
string_type transform(const CharType* first, const CharType* last) const;
pierwszy
Wskaźnik do pierwszego znaku w sekwencji, który ma zostać przekonwertowany.
ostatni
Wskaźnik do ostatniego znaku w sekwencji, który ma zostać przekonwertowany.
Ciąg zawierający przekształconą sekwencję znaków.
Funkcja składowa zwraca wartość 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
<ustawienia regionalne>
Bezpieczeństwo wątku w standardowej bibliotece C++