Condividi tramite


Classe collate

Modello di classe che descrive un oggetto che può fungere da facet delle impostazioni locali per controllare l'ordinamento e il raggruppamento di caratteri all'interno di una stringa, confronti tra di essi e l'hashing delle stringhe.

Sintassi

template <class CharType>
class collate : public locale::facet;

Parametri

Chartype
Tipo utilizzato all'interno di un programma per codificare i caratteri.

Osservazioni:

Come in qualsiasi facet delle impostazioni locali, l'ID dell'oggetto statico ha un valore archiviato iniziale uguale a zero. Il primo tentativo di accedere al valore archiviato consente di archiviare un valore positivo univoco in id. In alcuni linguaggi i caratteri vengono raggruppati e considerati come singoli caratteri, mentre in altri linguaggi i singoli caratteri vengono considerati come se fossero due caratteri. I servizi di ordinamento forniti dalla classe di ordinamento forniscono una modalità di ordinamento per questi casi.

Costruttori

Costruttore Descrizione
collate Costruttore per gli oggetti della classe collate utilizzato come facet delle impostazioni locali per gestire le convenzioni di ordinamento delle stringhe.

Typedef

Nome tipo Descrizione
char_type Tipo che descrive un carattere di tipo CharType.
string_type Tipo che descrive una stringa di tipo basic_string contenente caratteri di tipo CharType.

Funzioni membro

Funzione membro Descrizione
compare Confronta due sequenze di caratteri in base alle regole specifiche del relativo facet per verificarne l'uguaglianza o la disuguaglianza.
do_compare Funzione virtuale chiamata per confrontare due sequenze di caratteri in base alle regole specifiche del relativo facet per verificarne l'uguaglianza o la disuguaglianza.
do_hash Funzione virtuale chiamata per determinare il valore hash delle sequenze in base alle regole specifiche del relativo facet.
do_transform Funzione virtuale chiamata per convertire una sequenza di caratteri in una stringa che può essere utilizzata nei confronti lessicografici con altre sequenze di caratteri convertite in modo analogo dalle stesse impostazioni locali.
hash Determina il valore hash della sequenza in base alle regole specifiche del relativo facet.
transform Converte una sequenza di caratteri dalle impostazioni locali in una stringa che può essere utilizzata nei confronti lessicografici con altre sequenze di caratteri convertite in modo analogo dalle stesse impostazioni locali.

Requisiti

Intestazione:<impostazioni locali>

Spazio dei nomi: std

collate::char_type

Tipo che descrive un carattere di tipo CharType.

typedef CharType char_type;

Osservazioni:

Il tipo è un sinonimo del parametro di modello CharType.

collate::collate

Costruttore per gli oggetti della classe collate usato come facet delle impostazioni locali per gestire le convenzioni di ordinamento delle stringhe.

public:
    explicit collate(
    size_t _Refs = 0);

protected:
    collate(
const char* _Locname,
    size_t _Refs = 0);

Parametri

_Refs
Valore Integer che consente di specificare il tipo di gestione della memoria per l'oggetto.

_Locname
Nome delle impostazioni locali.

Osservazioni:

I valori possibili per il parametro _Refs e il loro significato sono:

  • 0: la durata dell'oggetto è gestita dalle impostazioni locali che lo contengono.

  • 1: la durata dell'oggetto deve essere gestita manualmente.

  • > 1: questi valori non sono definiti.

Il costruttore inizializza l'oggetto di base con locale::facet(_Refs).

collate::compare

Confronta due sequenze di caratteri in base alle regole specifiche del relativo facet per verificarne l'uguaglianza o la disuguaglianza.

int compare(const CharType* first1,
    const CharType* last1,
    const CharType* first2,
    const CharType* last2) const;

Parametri

first1
Puntatore al primo elemento nella prima sequenza da confrontare.

last1
Puntatore all'ultimo elemento nella prima sequenza da confrontare.

first2
Puntatore al primo elemento nella seconda sequenza da confrontare.

last2
Puntatore all'ultimo elemento nella seconda sequenza da confrontare.

Valore restituito

La funzione membro restituisce:

  • - 1 se la prima sequenza ottiene un risultato inferiore nel confronto con la seconda sequenza.

  • +1 se la seconda sequenza ottiene un risultato inferiore nel confronto con la prima sequenza.

  • 0 se le sequenze sono equivalenti.

Osservazioni:

La prima sequenza ottiene un risultato inferiore se contiene l'elemento più piccolo della prima coppia non equivalente rilevata nel confronto delle sequenze, oppure se non ci sono coppie non equivalenti, ma la prima sequenza è più breve.

La funzione membro restituisce do_compare( first1, last1, first2, last2).

Esempio

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

Funzione virtuale chiamata per confrontare due sequenze di caratteri in base alle regole specifiche del relativo facet per verificarne l'uguaglianza o la disuguaglianza.

virtual int do_compare(const CharType* first1,
    const CharType* last1,
    const CharType* first2,
    const CharType* last2) const;

Parametri

first1
Puntatore al primo elemento nella prima sequenza da confrontare.

last1
Puntatore all'ultimo elemento nella prima sequenza da confrontare.

first2
Puntatore al primo elemento nella seconda sequenza da confrontare.

last2
Puntatore all'ultimo elemento nella seconda sequenza da confrontare.

Valore restituito

La funzione membro restituisce:

  • - 1 se la prima sequenza ottiene un risultato inferiore nel confronto con la seconda sequenza.

  • +1 se la seconda sequenza ottiene un risultato inferiore nel confronto con la prima sequenza.

  • 0 se le sequenze sono equivalenti.

Osservazioni:

La funzione membro virtuale protetta confronta la sequenza in [ * first1, Last1)* con la sequenza in [ first2, last2). Confronta i valori applicando operator< tra coppie di elementi corrispondenti di tipo CharType. La prima sequenza ottiene un risultato inferiore se contiene l'elemento più piccolo della prima coppia non equivalente rilevata nel confronto delle sequenze, oppure se non ci sono coppie non equivalenti, ma la prima sequenza è più breve.

Esempio

Vedere l'esempio di collate::compare, che chiama do_compare.

collate::d o_hash

Funzione virtuale chiamata per determinare il valore hash delle sequenze in base alle regole specifiche del relativo facet.

virtual long do_hash(const CharType* first, const CharType* last) const;

Parametri

first
Un puntatore al primo carattere nella sequenza il cui valore deve essere determinato.

last
Un puntatore all'ultimo carattere nella sequenza il cui valore deve essere determinato.

Valore restituito

Valore hash di tipo long per la sequenza.

Osservazioni:

Un valore hash può essere utile, ad esempio, per distribuire le sequenze in modo pseudo-casuale all'interno di una matrice di elenchi.

Esempio

Vedere l'esempio di hash, che chiama do_hash.

collate::d o_transform

Funzione virtuale chiamata per convertire una sequenza di caratteri in una stringa che può essere utilizzata nei confronti lessicografici con altre sequenze di caratteri convertite in modo analogo dalle stesse impostazioni locali.

virtual string_type do_transform(const CharType* first, const CharType* last) const;

Parametri

first
Puntatore al primo carattere nella sequenza da convertire.

last
Puntatore all'ultimo carattere nella sequenza da convertire.

Valore restituito

Stringa corrispondente alla sequenza di caratteri trasformata.

Osservazioni:

La funzione del membro virtuale protetto restituisce un oggetto della classe string_type la cui sequenza controllata è una copia della sequenza [ first, last). Se una classe derivata dalla collate<CharType> esegue l'override di do_compare, deve anche eseguire l'override do_transform per trovare la corrispondenza. Quando vengono passate a collate::compare, due stringhe trasformate devono produrre lo stesso risultato che si otterrebbe dal passaggio delle stringhe non trasformate per il confronto nella classe derivata.

Esempio

Vedere l'esempio di transform che chiama do_transform.

collate::hash

Determina il valore hash della sequenza in base alle regole specifiche del relativo facet.

long hash(const CharType* first, const CharType* last) const;

Parametri

first
Un puntatore al primo carattere nella sequenza il cui valore deve essere determinato.

last
Un puntatore all'ultimo carattere nella sequenza il cui valore deve essere determinato.

Valore restituito

Valore hash di tipo long per la sequenza.

Osservazioni:

La funzione membro restituisce do_hash( first, last).

Un valore hash può essere utile, ad esempio, per distribuire le sequenze in modo pseudo-casuale all'interno di una matrice di elenchi.

Esempio

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

Tipo che descrive una stringa di tipo basic_string contenente caratteri di tipo CharType.

typedef basic_string<CharType> string_type;

Osservazioni:

Il tipo descrive una specializzazione del modello di classe basic_string i cui oggetti possono archiviare copie della sequenza di origine.

Esempio

Per un esempio di dichiarazione e uso di string_type, vedere transform.

collate::transform

Converte una sequenza di caratteri dalle impostazioni locali in una stringa che può essere utilizzata nei confronti lessicografici con altre sequenze di caratteri convertite in modo analogo dalle stesse impostazioni locali.

string_type transform(const CharType* first, const CharType* last) const;

Parametri

first
Puntatore al primo carattere nella sequenza da convertire.

last
Puntatore all'ultimo carattere nella sequenza da convertire.

Valore restituito

Stringa contenente la sequenza di caratteri trasformata.

Osservazioni:

La funzione membro restituisce do_transform(first, last).

Esempio

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

Vedi anche

<impostazioni locali>
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)