collate (Clase)
Una plantilla de clase que describe un objeto que puede actuar como faceta de configuración regional para controlar la ordenación y agrupación de los caracteres de una cadena, las comparaciones entre ellos y el hash de las cadenas.
Sintaxis
template <class CharType>
class collate : public locale::facet;
Parámetros
CharType
Tipo usado dentro de un programa para codificar caracteres.
Comentarios
Como ocurre con cualquier faceta de configuración regional, el identificador de objeto estático tiene un valor almacenado inicial de cero. El primer intento de acceso a su valor almacenado almacena un valor positivo único en id
. En algunos lenguajes, los caracteres se agrupan y se tratan como un carácter individual y, en otros, los caracteres individuales se tratan como si fueran dos caracteres. Los servicios de intercalación que proporciona la clase collate ofrecen una manera de ordenar estos casos.
Constructores
Constructor | Descripción |
---|---|
collate | El constructor para los objetos de la clase collate que actúa como una faceta de configuración regional para controlar las convenciones de ordenación de cadenas. |
Typedefs
Nombre de tipo | Descripción |
---|---|
char_type | Un tipo que describe un carácter de tipo CharType . |
string_type | Un tipo que describe una cadena de tipo basic_string que contiene caracteres de tipo CharType . |
Funciones miembro
Función de miembro | Descripción |
---|---|
compare | Compara la igualdad o la desigualdad de dos secuencias de caracteres según las reglas específicas de su faceta. |
do_compare | Función virtual a la que se llama para comparar la igualdad o la desigualdad de dos secuencias de caracteres según las reglas específicas de su faceta. |
do_hash | Función virtual a la que se llama para determinar el valor hash de las secuencias según las reglas específicas de su faceta. |
do_transform | Función virtual a la que se llama para convertir una secuencia de caracteres de una configuración regional en una cadena que se puede usar en comparaciones lexicográficas con otras secuencias de caracteres convertidas de igual forma a partir de la misma configuración regional. |
hash | Determina el valor hash de la secuencia según las reglas específicas de su faceta. |
transform | Convierte una secuencia de caracteres de una configuración regional en una cadena que se puede usar en comparaciones lexicográficas con otras secuencias de caracteres convertidas de forma similar a partir de la misma configuración regional. |
Requisitos
Encabezado:<locale>
Espacio de nombres: std
collate::char_type
Un tipo que describe un carácter de tipo CharType
.
typedef CharType char_type;
Comentarios
El tipo es un sinónimo del parámetro de plantilla CharType
.
collate::collate
El constructor para los objetos de la clase collate que actúa como una faceta de configuración regional para controlar las convenciones de ordenación de cadenas.
public:
explicit collate(
size_t _Refs = 0);
protected:
collate(
const char* _Locname,
size_t _Refs = 0);
Parámetros
_Refs
Valor entero que se usa para especificar el tipo de administración de memoria del objeto.
_Locname
El nombre de la configuración regional.
Comentarios
Los valores posibles del parámetro _Refs y su importancia son:
0: la vigencia del objeto se administra mediante las configuraciones regionales que lo contienen.
1: la vigencia del objeto se debe administrar de manera manual.
> 1: estos valores no están definidos.
El constructor inicializa su objeto base con locale::facet(_Refs
).
collate::compare
Compara la igualdad o la desigualdad de dos secuencias de caracteres según las reglas específicas de su faceta.
int compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
Parámetros
first1
Puntero al primer elemento en la primera secuencia que se va a comparar.
last1
Puntero al último elemento en la primera secuencia que se va a comparar.
first2
Puntero al primer elemento en la segunda secuencia que se va a comparar.
last2
Puntero al último elemento en la segunda secuencia que se va a comparar.
Valor devuelto
La función miembro devuelve:
-1 si la primera secuencia compara menos que la segunda secuencia.
+1 si la segunda secuencia compara menos que la primera secuencia.
0 si las secuencias son equivalentes.
Comentarios
La primera secuencia compara menos si tiene el menor elemento del par desigual más antiguo en las secuencias o si no existe ningún par desigual, pero la primera secuencia es más corta.
La función miembro devuelve do_compare( first1
, last1
, first2
, last2
).
Ejemplo
// 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
Función virtual a la que se llama para comparar la igualdad o la desigualdad de dos secuencias de caracteres según las reglas específicas de su faceta.
virtual int do_compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
Parámetros
first1
Puntero al primer elemento en la primera secuencia que se va a comparar.
last1
Puntero al último elemento en la primera secuencia que se va a comparar.
first2
Puntero al primer elemento en la segunda secuencia que se va a comparar.
last2
Puntero al último elemento en la segunda secuencia que se va a comparar.
Valor devuelto
La función miembro devuelve:
-1 si la primera secuencia compara menos que la segunda secuencia.
+1 si la segunda secuencia compara menos que la primera secuencia.
0 si las secuencias son equivalentes.
Comentarios
La función miembro virtual protegida compara la secuencia en [ * first1, Last1)* con la secuencia en [ first2, last2). Compara valores al aplicar operator<
entre pares de elementos correspondientes de tipo CharType
. La primera secuencia compara menos si tiene el menor elemento del par desigual más antiguo en las secuencias o, si no existe ningún par desigual, pero la primera secuencia es más corta.
Ejemplo
Vea el ejemplo de collate::compare, que llama a do_compare
.
collate::d o_hash
Función virtual a la que se llama para determinar el valor hash de las secuencias según las reglas específicas de su faceta.
virtual long do_hash(const CharType* first, const CharType* last) const;
Parámetros
first
Un puntero al primer carácter de la secuencia cuyo valor hash tiene que determinarse.
last
Un puntero al último carácter de la secuencia cuyo valor hash tiene que determinarse.
Valor devuelto
Un valor hash de tipo long
para la secuencia.
Comentarios
Un valor hash puede ser útil, por ejemplo, para distribuir secuencias de forma pseudoaleatoria entre una matriz de listas.
Ejemplo
Vea el ejemplo de hash, que llama a do_hash
.
collate::d o_transform
Función virtual a la que se llama para convertir una secuencia de caracteres de una configuración regional en una cadena que se puede usar en comparaciones lexicográficas con otras secuencias de caracteres convertidas de igual forma a partir de la misma configuración regional.
virtual string_type do_transform(const CharType* first, const CharType* last) const;
Parámetros
first
Un puntero al primer carácter de la secuencia que se va a convertir.
last
Un puntero al último carácter de la secuencia que se va a convertir.
Valor devuelto
Una cadena que es la secuencia de caracteres transformada.
Comentarios
La función de miembro virtual protegida devuelve un objeto de clase string_type cuya secuencia controlada es una copia de la secuencia [ first
, last
). Si una clase derivada de collate<CharType> reemplaza a do_compare, también debe reemplazar a do_transform
para que coincida. Cuando se pasan a collate::compare
, dos cadenas transformadas deben producir el mismo resultado que se obtendría al pasar las cadenas sin transformar para comparar en la clase derivada.
Ejemplo
Vea el ejemplo de transform, que llama a do_transform
.
collate::hash
Determina el valor hash de la secuencia según las reglas específicas de su faceta.
long hash(const CharType* first, const CharType* last) const;
Parámetros
first
Un puntero al primer carácter de la secuencia cuyo valor hash tiene que determinarse.
last
Un puntero al último carácter de la secuencia cuyo valor hash tiene que determinarse.
Valor devuelto
Un valor hash de tipo long
para la secuencia.
Comentarios
La función miembro devuelve do_hash( first
, last
).
Un valor hash puede ser útil, por ejemplo, para distribuir secuencias de forma pseudoaleatoria entre una matriz de listas.
Ejemplo
// 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
Un tipo que describe una cadena de tipo basic_string
que contiene caracteres de tipo CharType
.
typedef basic_string<CharType> string_type;
Comentarios
El tipo describe una especialización de plantilla de clase basic_string cuyos objetos pueden almacenar copias de la secuencia de origen.
Ejemplo
Para obtener un ejemplo de cómo declarar y usar string_type
, vea transform.
collate::transform
Convierte una secuencia de caracteres de una configuración regional en una cadena que se puede usar en comparaciones lexicográficas con otras secuencias de caracteres convertidas de forma similar a partir de la misma configuración regional.
string_type transform(const CharType* first, const CharType* last) const;
Parámetros
first
Un puntero al primer carácter de la secuencia que se va a convertir.
last
Un puntero al último carácter de la secuencia que se va a convertir.
Valor devuelto
Una cadena que contiene la secuencia de caracteres transformada.
Comentarios
La función miembro devuelve do_transform(first
, last
).
Ejemplo
// 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
Vea también
<locale>
Seguridad para subprocesos en la biblioteca estándar de C++