Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um modelo de classe que descreve um objeto que pode servir como uma faceta de localidade para controlar a ordenação e o agrupamento de caracteres dentro de uma cadeia de caracteres, comparações entre eles e o hash de cadeias de caracteres.
Sintaxe
template <class CharType>
class collate : public locale::facet;
Parâmetros
CharType
O tipo usado dentro de um programa para codificar caracteres.
Observações
Como em qualquer faceta de localidade, o ID do objeto estático tem um valor inicial armazenado de zero. A primeira tentativa de acessar seu valor armazenado armazena um valor positivo único no id. Em algumas línguas, os caracteres são agrupados e tratados como um único caractere, e em outras, caracteres individuais são tratados como se fossem dois caracteres. Os serviços de agrupamento fornecidos pela classe de agrupamento fornecem a maneira de classificar esses casos.
Construtores
| Construtor | Descrição |
|---|---|
| Colar | O construtor para objetos de classe collate que serve como uma faceta de localidade para manipular convenções de classificação de cadeia de caracteres. |
Typedefs (definições de tipos)
| Nome do tipo | Descrição |
|---|---|
| char_type | Um tipo que descreve um caractere do tipo CharType. |
| string_type | Um tipo que descreve uma cadeia de caracteres do tipo basic_string que contém caracteres do tipo CharType. |
Funções de membro
| Função de membro | Descrição |
|---|---|
| comparar preços | Compara duas sequências de caracteres de acordo com suas regras específicas de faceta para igualdade ou desigualdade. |
| do_compare | Uma função virtual chamada para comparar duas sequências de caracteres de acordo com suas regras específicas de faceta para igualdade ou desigualdade. |
| do_hash | Uma função virtual chamada para determinar o valor de hash de sequências de acordo com suas regras específicas de faceta. |
| do_transform | Uma função virtual chamada para converter uma sequência de caracteres de uma localidade para uma cadeia de caracteres que pode ser usada em comparações lexicográficas com outras sequências de caracteres convertidas de forma semelhante a partir da mesma localidade. |
| hash | Determina o valor de hash da sequência de acordo com suas regras específicas de faceta. |
| transformar | Converte uma sequência de caracteres de uma localidade em uma cadeia de caracteres que pode ser usada em comparações lexicográficas com outras sequências de caracteres convertidas de forma semelhante da mesma localidade. |
Requerimentos
Cabeçalho:<localidade>
Espaço de nomes: std
Collate::char_type
Um tipo que descreve um caractere do tipo CharType.
typedef CharType char_type;
Observações
O tipo é um sinônimo para o parâmetro de modelo CharType.
collate::collate
O construtor para objetos de agrupamento de classe que serve como uma faceta de localidade para manipular convenções de classificação de cadeia de caracteres.
public:
explicit collate(
size_t _Refs = 0);
protected:
collate(
const char* _Locname,
size_t _Refs = 0);
Parâmetros
_Refs
Valor inteiro usado para especificar o tipo de gerenciamento de memória para o objeto.
_Locname
O nome da localidade.
Observações
Os valores possíveis para o parâmetro _Refs e sua significância são:
0: O tempo de vida do objeto é gerenciado pelas localidades que o contêm.
1: O tempo de vida do objeto deve ser gerenciado manualmente.
> 1: Estes valores não estão definidos.
O construtor inicializa seu objeto base com locale::facet(_Refs).
collate::comparar
Compara duas sequências de caracteres de acordo com suas regras específicas de faceta para igualdade ou desigualdade.
int compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
Parâmetros
primeiro1
Ponteiro para o primeiro elemento na primeira sequência a ser comparada.
última1
Ponteiro para o último elemento na primeira sequência a ser comparada.
primeiro2
Ponteiro para o primeiro elemento na segunda sequência a ser comparada.
última2
Ponteiro para o último elemento na segunda sequência a ser comparada.
Valor de retorno
A função de membro retorna:
-1 se a primeira sequência comparar menos do que a segunda sequência.
+1 se a segunda sequência comparar menos do que a primeira.
0 se as sequências forem equivalentes.
Observações
A primeira sequência compara menos se tiver o elemento menor no primeiro par desigual nas sequências, ou, se não existirem pares desiguais, mas a primeira sequência for mais curta.
A função de membro retorna do_compare(first1, last1, first2last2, ).
Exemplo
// 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
Uma função virtual chamada para comparar duas sequências de caracteres de acordo com suas regras específicas de faceta para igualdade ou desigualdade.
virtual int do_compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
Parâmetros
primeiro1
Ponteiro para o primeiro elemento na primeira sequência a ser comparada.
última1
Ponteiro para o último elemento na primeira sequência a ser comparada.
primeiro2
Ponteiro para o primeiro elemento na segunda sequência a ser comparada.
última2
Ponteiro para o último elemento na segunda sequência a ser comparada.
Valor de retorno
A função de membro retorna:
-1 se a primeira sequência comparar menos do que a segunda sequência.
+1 se a segunda sequência comparar menos do que a primeira.
0 se as sequências forem equivalentes.
Observações
A função de membro virtual protegido compara a sequência em [ * first1, Last1)* com a sequência em [ first2, last2). Ele compara valores aplicando operator< entre pares de elementos correspondentes do tipo CharType. A primeira sequência compara menos se tiver o elemento menor no primeiro par desigual nas sequências ou se não existirem pares desiguais, mas a primeira sequência for mais curta.
Exemplo
Veja o exemplo para collate::compare, que chama do_compare.
collate::d o_hash
Uma função virtual chamada para determinar o valor de hash de sequências de acordo com suas regras específicas de faceta.
virtual long do_hash(const CharType* first, const CharType* last) const;
Parâmetros
primeira
Um ponteiro para o primeiro caractere na sequência cujo valor deve ser determinado.
último
Um ponteiro para o último caractere da sequência cujo valor deve ser determinado.
Valor de retorno
Um valor de hash do tipo long para a sequência.
Observações
Um valor de hash pode ser útil, por exemplo, na distribuição de sequências pseudo-aleatoriamente em uma matriz de listas.
Exemplo
Veja o exemplo de hash, que chama do_hash.
collate::d o_transform
Uma função virtual chamada para converter uma sequência de caracteres de uma localidade para uma cadeia de caracteres que pode ser usada em comparações lexicográficas com outras sequências de caracteres convertidas de forma semelhante a partir da mesma localidade.
virtual string_type do_transform(const CharType* first, const CharType* last) const;
Parâmetros
primeira
Um ponteiro para o primeiro caractere na sequência a ser convertida.
último
Um ponteiro para o último caractere na sequência a ser convertida.
Valor de retorno
Uma cadeia de caracteres que é a sequência de caracteres transformada.
Observações
A função de membro virtual protegido retorna um objeto de classe string_type cuja sequência controlada é uma cópia da sequência [ first, last). Se uma classe derivada de< CharType > substituir do_compare, ela também deverá substituir do_transform para corresponder. Quando passadas para collate::compare, duas cadeias de caracteres transformadas devem produzir o mesmo resultado que você obteria ao passar as cadeias de caracteres não transformadas para comparar na classe derivada.
Exemplo
Veja o exemplo de transformação, que chama do_transform.
collate::hash
Determina o valor de hash da sequência de acordo com suas regras específicas de faceta.
long hash(const CharType* first, const CharType* last) const;
Parâmetros
primeira
Um ponteiro para o primeiro caractere na sequência cujo valor deve ser determinado.
último
Um ponteiro para o último caractere da sequência cujo valor deve ser determinado.
Valor de retorno
Um valor de hash do tipo long para a sequência.
Observações
A função de membro retorna do_hash(first, last).
Um valor de hash pode ser útil, por exemplo, na distribuição de sequências pseudo-aleatoriamente em uma matriz de listas.
Exemplo
// 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
Um tipo que descreve uma cadeia de caracteres do tipo basic_string que contém caracteres do tipo CharType.
typedef basic_string<CharType> string_type;
Observações
O tipo descreve uma especialização do modelo de classe basic_string cujos objetos podem armazenar cópias da sequência de origem.
Exemplo
Para obter um exemplo de como declarar e usar string_typeo , consulte transformar.
agrupar::transformar
Converte uma sequência de caracteres de uma localidade em uma cadeia de caracteres que pode ser usada em comparações lexicográficas com outras sequências de caracteres convertidas de forma semelhante da mesma localidade.
string_type transform(const CharType* first, const CharType* last) const;
Parâmetros
primeira
Um ponteiro para o primeiro caractere na sequência a ser convertida.
último
Um ponteiro para o último caractere na sequência a ser convertida.
Valor de retorno
Uma cadeia de caracteres que contém a sequência de caracteres transformada.
Observações
A função de membro retorna do_transform(first, last).
Exemplo
// 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