Partager via


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