collate, classe
Modèle de classe qui décrit un objet qui peut servir de facette de paramètres régionaux pour contrôler l’ordre et le regroupement de caractères dans une chaîne, des comparaisons entre eux et le hachage de chaînes.
Syntaxe
template <class CharType>
class collate : public locale::facet;
Paramètres
CharType
Type utilisé dans le cadre d'un programme pour encoder des caractères.
Notes
Comme avec n'importe quelle facette de paramètres régionaux, l'ID d'objet statique possède une valeur stockée initiale de zéro. La première tentative d’accès à sa valeur stockée entraîne le stockage d’une valeur positive unique dans id
. Dans certaines langues, plusieurs caractères peuvent être regroupés et traités comme un seul caractère, et dans d'autres, un caractère peut être traité comme un ensemble de deux caractères. Les services de classement fournis par la classe collate permettent de gérer ces cas.
Constructeurs
Constructeur | Description |
---|---|
collate | Constructeur des objets de la classe collate qui sert de facette de paramètres régionaux pour la gestion des conventions de tri de chaînes. |
Typedefs
Nom de type | Description |
---|---|
char_type | Type qui décrit un caractère de type CharType . |
string_type | Type qui décrit une chaîne de type basic_string qui contient des caractères de type CharType . |
Fonctions Membre
Fonction membre | Description |
---|---|
compare | Compare deux séquences de caractères selon leurs règles de facette afin de vérifier leur égalité ou leur inégalité. |
do_compare | Fonction virtuelle appelée pour comparer deux séquences de caractères selon leurs règles de facette afin de vérifier leur égalité ou leur inégalité. |
do_hash | Fonction virtuelle appelée pour déterminer la valeur de hachage des séquences en fonction de leurs règles de facette. |
do_transform | Fonction virtuelle appelée pour convertir une séquence de caractères de paramètres régionaux en une chaîne pouvant être utilisée dans des comparaisons lexicographiques avec d'autres séquences de caractères également converties depuis les mêmes paramètres régionaux. |
hash | Détermine la valeur de hachage d'une séquence en fonction de ses règles de facette. |
transform | Convertit une séquence de caractères de paramètres régionaux en une chaîne qui peut être utilisée dans des comparaisons lexicographiques avec d'autres séquences de caractères, elles aussi converties depuis les mêmes paramètres régionaux. |
Spécifications
Header :<locale>
Espace de noms : std
collate ::char_type
Type qui décrit un caractère de type CharType
.
typedef CharType char_type;
Notes
Le type est un synonyme du paramètre de modèle CharType
.
collate ::collate
Constructeur des objets de la classe collate qui sert de facette de paramètres régionaux pour la gestion des conventions de tri de chaînes.
public:
explicit collate(
size_t _Refs = 0);
protected:
collate(
const char* _Locname,
size_t _Refs = 0);
Paramètres
_Refs
Valeur entière qui sert à spécifier le type de gestion de la mémoire pour l’objet.
_Locname
Nom des paramètres régionaux.
Notes
Les valeurs possibles pour le paramètre _Refs et leur signification sont les suivantes :
0 : la durée de vie de l’objet est gérée par les paramètres régionaux qui le contiennent.
1 : la durée de vie de l’objet doit être gérée manuellement.
> 1 : Ces valeurs ne sont pas définies.
Le constructeur initialise son objet de base avec les paramètres régionaux ::facet(_Refs
).
collate ::compare
Compare deux séquences de caractères selon leurs règles de facette afin de vérifier leur égalité ou leur inégalité.
int compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
Paramètres
first1
Pointeur vers le premier élément de la première séquence à comparer.
last1
Pointeur vers le dernier élément de la première séquence à comparer.
first2
Pointeur vers le premier élément de la deuxième séquence à comparer.
last2
Pointeur vers le dernier élément de la deuxième séquence à comparer.
Valeur de retour
La fonction membre retourne :
-1 si la première séquence est inférieure à la deuxième séquence.
+1 si la deuxième séquence est inférieure à la première séquence.
0 si les séquences sont équivalentes.
Notes
La première séquence est inférieure si elle a le plus petit élément dans la première paire inégale des séquences ou si aucune paire inégale n’existe, mais que la première séquence est plus courte.
La fonction membre retourne do_compare( first1
, last1
, first2
, last2
).
Exemple
// 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
Fonction virtuelle appelée pour comparer deux séquences de caractères selon leurs règles de facette afin de vérifier leur égalité ou leur inégalité.
virtual int do_compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
Paramètres
first1
Pointeur vers le premier élément de la première séquence à comparer.
last1
Pointeur vers le dernier élément de la première séquence à comparer.
first2
Pointeur vers le premier élément de la deuxième séquence à comparer.
last2
Pointeur vers le dernier élément de la deuxième séquence à comparer.
Valeur de retour
La fonction membre retourne :
-1 si la première séquence est inférieure à la deuxième séquence.
+1 si la deuxième séquence est inférieure à la première séquence.
0 si les séquences sont équivalentes.
Notes
La fonction membre virtuelle protégée compare la séquence à [ * first1, Last1)* par la séquence à [ first2, last2). Il compare les valeurs en appliquant operator<
des paires d’éléments correspondants de type CharType
. La première séquence est inférieure si elle a le plus petit élément dans la première paire inégale des séquences ou si aucune paire inégale n’existe, mais que la première séquence est plus courte.
Exemple
Consultez l’exemple relatif à collate::compare, qui appelle do_compare
.
collate ::d o_hash
Fonction virtuelle appelée pour déterminer la valeur de hachage des séquences en fonction de leurs règles de facette.
virtual long do_hash(const CharType* first, const CharType* last) const;
Paramètres
first
Pointeur vers le premier caractère de la séquence dont la valeur doit être déterminée.
last
Pointeur vers le dernier caractère de la séquence dont la valeur doit être déterminée.
Valeur de retour
Valeur de hachage de type long
pour la séquence.
Notes
Une valeur de hachage peut être utile, par exemple, dans la répartition des séquences de manière pseudo-aléatoire sur un tableau de listes.
Exemple
Consultez l’exemple relatif à hash, qui appelle do_hash
.
collate ::d o_transform
Fonction virtuelle appelée pour convertir une séquence de caractères de paramètres régionaux en une chaîne pouvant être utilisée dans des comparaisons lexicographiques avec d'autres séquences de caractères également converties depuis les mêmes paramètres régionaux.
virtual string_type do_transform(const CharType* first, const CharType* last) const;
Paramètres
first
Pointeur vers le premier caractère de la séquence à convertir.
last
Pointeur vers le dernier caractère de la séquence à convertir.
Valeur de retour
Chaîne qui est la séquence de caractères transformée.
Notes
La fonction membre virtuelle protégée retourne un objet de la classe string_type dont la séquence contrôlée est une copie de la séquence [ first
, last
). Si une classe dérivée de la collection<CharType> remplace do_compare, elle doit également être remplacée do_transform
par la correspondance. Quand elles sont passées à collate::compare
, deux chaînes transformées doivent générer le même résultat que si vous passez les chaînes non transformées à comparer dans la classe dérivée.
Exemple
Consultez l’exemple relatif à transform, qui appelle do_transform
.
collate ::hash
Détermine la valeur de hachage d'une séquence en fonction de ses règles de facette.
long hash(const CharType* first, const CharType* last) const;
Paramètres
first
Pointeur vers le premier caractère de la séquence dont la valeur doit être déterminée.
last
Pointeur vers le dernier caractère de la séquence dont la valeur doit être déterminée.
Valeur de retour
Valeur de hachage de type long
pour la séquence.
Notes
La fonction membre retourne do_hash( first
, last
).
Une valeur de hachage peut être utile, par exemple, dans la répartition des séquences de manière pseudo-aléatoire sur un tableau de listes.
Exemple
// 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
Type qui décrit une chaîne de type basic_string
qui contient des caractères de type CharType
.
typedef basic_string<CharType> string_type;
Notes
Le type décrit une spécialisation du modèle de classe basic_string dont les objets peuvent stocker des copies de la séquence source.
Exemple
Pour savoir comment déclarer et utiliser string_type
, consultez transform.
collate ::transform
Convertit une séquence de caractères de paramètres régionaux en une chaîne qui peut être utilisée dans des comparaisons lexicographiques avec d'autres séquences de caractères, elles aussi converties depuis les mêmes paramètres régionaux.
string_type transform(const CharType* first, const CharType* last) const;
Paramètres
first
Pointeur vers le premier caractère de la séquence à convertir.
last
Pointeur vers le dernier caractère de la séquence à convertir.
Valeur de retour
Chaîne qui contient la séquence de caractères transformée.
Notes
La fonction membre retourne do_transform(first
, last
).
Exemple
// 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
Voir aussi
<locale>
Sécurité des threads dans la bibliothèque C++ Standard