Partilhar via


Classe collate

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

Ver também

<localidade>
segurança de threads na biblioteca padrão C++