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++)