Freigeben über


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 CharTypedar.

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 CharTypeangewendet 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

Siehe auch

<Gebietsschema>
Threadsicherheit in der C++-Standardbibliothek