collate-Klasse
Eine Klassenvorlage, die ein Objekt beschreibt, das als Gebietsschema-Facet dienen kann, um die Sortierung und Gruppierung von Zeichen in einer Zeichenfolge zu steuern, Vergleiche zwischen ihnen und dem Hashing von Zeichenfolgen.
Syntax
template <class CharType>
class collate : public locale::facet;
Parameter
CharType
Der Typ, der innerhalb eines Programms verwendet wird, um Zeichen zu codieren.
Hinweise
Wie bei jedem Gebietsschemafacet hat die statische Objekt-ID einen anfänglichen gespeicherten Wert von NULL. Beim ersten Versuch, auf den gespeicherten Wert zuzugreifen, wird ein eindeutiger positiver Wert in id
gespeichert. In einigen Sprachen werden Zeichen gruppiert und als einzelnes Zeichen behandelt. In anderen Sprachen hingegen werden einzelne Zeichen als zwei Zeichen behandelt. Die sortierenden Dienste, die von der collate-Klasse bereitgestellt werden, bieten die Möglichkeit zum Sortieren dieser Fälle.
Konstruktoren
Konstruktor | Beschreibung |
---|---|
collate | Der Konstruktor für Objekte der collate -Klasse, die als Gebietsschemafacet dient, um Zeichenfolgensortierungskonventionen zu bearbeiten. |
TypeDefs
Typname | Beschreibung |
---|---|
char_type | Ein Typ, der ein Zeichen vom Typ CharType beschreibt. |
string_type | Ein Typ, der eine Zeichenfolge vom Typ basic_string beschreibt, die Zeichen vom Typ CharType enthält. |
Memberfunktionen
Memberfunktion | Beschreibung |
---|---|
compare | Vergleicht zwei Zeichensequenzen nach ihren facetspezifischen Regeln für Gleichheit oder Ungleichheit. |
do_compare | Eine virtuelle Funktion, die aufgerufen wird, um zwei Zeichensequenzen gemäß ihren facetspezifischen Regeln in Bezug auf Gleichheit oder Ungleichheit zu vergleichen. |
do_hash | Eine virtuelle Funktion, die aufgerufen wird, um den Hashwert der Sequenzen anhand der facetspezifischen Regeln zu bestimmen. |
do_transform | Eine virtuelle Funktion, die aufgerufen wird, um eine Zeichenfolge aus einem Gebietsschema in eine Zeichenfolge zu konvertieren, die in den lexikografischen Vergleichen mit anderen Zeichensequenzen verwendet werden kann, die auf ähnliche Weise aus demselben Gebietsschema konvertiert wurden. |
hash | Bestimmt den Hashwert der Sequenz nach ihren facetspezifischen Regeln. |
transform | Konvertiert eine Zeichenfolge von einem Gebietsschema in eine Zeichenfolge, die in den lexikografischen Vergleichen mit anderen Zeichenfolgen verwendet wird, die auf ähnliche Weise aus dem gleichen Gebietsschema konvertiert wurden. |
Anforderungen
Header:<locale>
Namespace: std
collate::char_type
Ein Typ, der ein Zeichen vom Typ CharType
beschreibt.
typedef CharType char_type;
Hinweise
Der Type stellt ein Synonym für den Vorlagenparameter CharType
dar.
collate::collate
Der Konstruktor für Objekte der collate-Klasse, die als Gebietsschemafacet dient, um Sortierungskonventionen für Zeichenfolgen zu behandeln.
public:
explicit collate(
size_t _Refs = 0);
protected:
collate(
const char* _Locname,
size_t _Refs = 0);
Parameter
_Refs
Integerwert, der zum Angeben des Speicherverwaltungstyps für das Objekt verwendet wird.
_Locname
Der Name des Gebietsschemas.
Hinweise
Die möglichen Werte für den _Refs Parameter und deren Bedeutung sind:
0: Die Lebensdauer des Objekts wird von den Gebietsschemas verwaltet, in denen es enthalten ist.
1: Die Lebensdauer des Objekts muss manuell verwaltet werden.
> 1: Diese Werte sind nicht definiert.
Der Konstruktor initialisiert sein Basisobjekt mit locale::facet(_Refs
).
collate::compare
Vergleicht zwei Zeichensequenzen nach ihren facetspezifischen Regeln für Gleichheit oder Ungleichheit.
int compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
Parameter
first1
Zeiger auf das erste Element in der ersten zu vergleichenden Sequenz.
letzte 1
Zeiger auf das letzte Element in der ersten zu vergleichenden Sequenz.
First2
Zeiger auf das erste Element in der zweiten zu vergleichenden Sequenz.
letzte2
Zeiger auf das letzte Element in der zweiten zu vergleichenden Sequenz.
Rückgabewert
Die Memberfunktion gibt Folgendes zurück:
-1, wenn die erste Sequenz im Vergleich kleiner ist als die zweite Sequenz.
+1, wenn die zweite Sequenz kleiner als die erste Sequenz ist.
0, wenn die Sequenzen gleichwertig sind.
Hinweise
Die erste Sequenz ist im Vergleich kleiner, wenn sie im frühesten ungleichen Paar in den Sequenzen das kleinere Element enthält oder wenn zwar keine ungleichen Paare vorhanden sind, die erste Sequenz aber kürzer ist.
Die Memberfunktion gibt do_compare( first1
, last1
, first2
, last2
) zurück.
Beispiel
// 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
Eine virtuelle Funktion, die aufgerufen wird, um zwei Zeichensequenzen gemäß ihren facetspezifischen Regeln in Bezug auf Gleichheit oder Ungleichheit zu vergleichen.
virtual int do_compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
Parameter
first1
Zeiger auf das erste Element in der ersten zu vergleichenden Sequenz.
letzte 1
Zeiger auf das letzte Element in der ersten zu vergleichenden Sequenz.
First2
Zeiger auf das erste Element in der zweiten zu vergleichenden Sequenz.
letzte2
Zeiger auf das letzte Element in der zweiten zu vergleichenden Sequenz.
Rückgabewert
Die Memberfunktion gibt Folgendes zurück:
-1, wenn die erste Sequenz im Vergleich kleiner ist als die zweite Sequenz.
+1, wenn die zweite Sequenz kleiner als die erste Sequenz ist.
0, wenn die Sequenzen gleichwertig sind.
Hinweise
Die geschützte virtuelle Memberfunktion vergleicht die Sequenz bei [ * first1, Last1)* mit der Sequenz bei [ first2, last2). Es vergleicht Werte, indem zwischen Paaren der entsprechenden Elemente des Typs CharType
angewendet operator<
wird. Die erste Sequenz ist im Vergleich kleiner, wenn sie im frühesten ungleichen Paar in den Sequenzen das kleinere Element enthält oder wenn zwar keine ungleichen Paare vorhanden sind, die erste Sequenz aber kürzer ist.
Beispiel
Siehe das Beispiel für collate::compare, mit dem do_compare
aufgerufen wird.
collate::d o_hash
Eine virtuelle Funktion, die aufgerufen wird, um den Hashwert der Sequenzen anhand der facetspezifischen Regeln zu bestimmen.
virtual long do_hash(const CharType* first, const CharType* last) const;
Parameter
first
Ein Zeiger auf das erste Zeichen in der Sequenz, dessen Hashwert bestimmt werden soll.
last
Ein Zeiger auf das letzte Zeichen in der Sequenz, dessen Hashwert bestimmt werden soll.
Rückgabewert
Ein Hashwert vom Typ long
für die Sequenz.
Hinweise
Ein Hashwert kann beispielsweise nützlich sein, um Sequenzen pseudozufällig auf ein Array von Listen zu verteilen.
Beispiel
Siehe das Beispiel für hash, mit dem do_hash
aufgerufen wird.
collate::d o_transform
Eine virtuelle Funktion, die aufgerufen wird, um eine Zeichenfolge aus einem Gebietsschema in eine Zeichenfolge zu konvertieren, die in den lexikografischen Vergleichen mit anderen Zeichensequenzen verwendet werden kann, die auf ähnliche Weise aus demselben Gebietsschema konvertiert wurden.
virtual string_type do_transform(const CharType* first, const CharType* last) const;
Parameter
first
Ein Zeiger auf das erste Zeichen in der zu konvertierenden Sequenz.
last
Ein Zeiger auf das letzte Zeichen in der zu konvertierenden Sequenz.
Rückgabewert
Eine Zeichenfolge, bei der es sich um die transformierte Zeichensequenz handelt.
Hinweise
Die geschützte virtuelle Memberfunktion gibt ein Objekt der Klasse string_type zurück, dessen gesteuerte Sequenz eine Kopie der Sequenz [ first
, last
) ist. Wenn eine von der Sortierung<von CharType> abgeleitete Klasse do_compare überschreibt, sollte sie auch außer Kraft gesetzt do_transform
werden. Bei der Übergabe an collate::compare
müssen zwei transformierte Zeichenfolgen zu demselben Ergebnis führen, das Sie erhalten würden, wenn die untransformierten Zeichenfolgen für den Vergleich in der abgeleiteten Klasse übergeben würden.
Beispiel
Siehe das Beispiel für transform, mit dem do_transform
aufgerufen wird.
collate::hash
Bestimmt den Hashwert der Sequenz nach ihren facetspezifischen Regeln.
long hash(const CharType* first, const CharType* last) const;
Parameter
first
Ein Zeiger auf das erste Zeichen in der Sequenz, dessen Hashwert bestimmt werden soll.
last
Ein Zeiger auf das letzte Zeichen in der Sequenz, dessen Hashwert bestimmt werden soll.
Rückgabewert
Ein Hashwert vom Typ long
für die Sequenz.
Hinweise
Die Memberfunktion gibt do_hash( first
, last
) zurück.
Ein Hashwert kann beispielsweise nützlich sein, um Sequenzen pseudozufällig auf ein Array von Listen zu verteilen.
Beispiel
// 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
Ein Typ, der eine Zeichenfolge vom Typ basic_string
beschreibt, die Zeichen vom Typ CharType
enthält.
typedef basic_string<CharType> string_type;
Hinweise
Der Typ beschreibt eine Spezialisierung der Klassenvorlage basic_string , deren Objekte Kopien der Quellsequenz speichern können.
Beispiel
Unter transform finden Sie ein Beispiel für das Deklarieren und Verwenden von string_type
.
collate::transform
Konvertiert eine Zeichenfolge von einem Gebietsschema in eine Zeichenfolge, die in den lexikografischen Vergleichen mit anderen Zeichenfolgen verwendet wird, die auf ähnliche Weise aus dem gleichen Gebietsschema konvertiert wurden.
string_type transform(const CharType* first, const CharType* last) const;
Parameter
first
Ein Zeiger auf das erste Zeichen in der zu konvertierenden Sequenz.
last
Ein Zeiger auf das letzte Zeichen in der zu konvertierenden Sequenz.
Rückgabewert
Eine Zeichenfolge, die die transformierte Zeichensequenz enthält.
Hinweise
Die Memberfunktion gibt do_transform(first
, last
) zurück.
Beispiel
// 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