Compartilhar via


Classe collate

Um modelo de classe que descreve um objeto que pode funcionar como uma faceta de localidade para controlar a ordenação e o agrupamento de caracteres em uma cadeia de caracteres, as 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 em um programa para codificar caracteres.

Comentários

Como qualquer faceta de localidade, a ID de objeto estático tem um valor armazenado inicial de zero. A primeira tentativa de acessar seu valor armazenado armazena um valor positivo exclusivo em id. Em algumas linguagens, 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 collate fornecem o meio de classificar esses casos.

Construtores

Construtor Descrição
collate O construtor para objetos da classe collate que serve como uma faceta de localidade para tratar convenções de classificação de cadeia de caracteres.

Typedefs

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
compare Compara duas sequências de caracteres de acordo com as igualdades ou desigualdades das respectivas regras específicas de faceta.
do_compare Uma função virtual chamada para comparar duas sequências de caracteres de acordo com as igualdades ou desigualdades das respectivas regras específicas de faceta.
do_hash Uma função virtual chamada para determinar o valor de hash das sequências de acordo com as respectivas regras específicas de faceta.
do_transform Uma função virtual chamada para converter 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 da mesma forma da mesma localidade.
hash Determina o valor de hash da sequência de acordo com suas regras específicas de faceta.
transform 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 da mesma forma da mesma localidade.

Requisitos

Cabeçalho:<locale>

Namespace: std

collate::char_type

Um tipo que descreve um caractere do tipo CharType.

typedef CharType char_type;

Comentários

O tipo é um sinônimo do parâmetro de modeloCharType.

collate::collate

O construtor de objetos da classe collate que funciona 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 do objeto.

_Locname
O nome da localidade.

Comentários

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: esses valores não estão definidos.

O construtor inicializa seu objeto base com locale::facet( _Refs).

collate::compare

Compara duas sequências de caracteres de acordo com as igualdades ou desigualdades das respectivas regras específicas de faceta.

int compare(const CharType* first1,
    const CharType* last1,
    const CharType* first2,
    const CharType* last2) const;

Parâmetros

first1
Ponteiro para o primeiro elemento na primeira sequência a ser comparada.

last1
Ponteiro para o último elemento na primeira sequência a ser comparada.

first2
Ponteiro para o primeiro elemento na segunda sequência a ser comparada.

last2
Ponteiro para o último elemento na segunda sequência a ser comparada.

Valor de retorno

A função membro retornará:

  • –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 sequência.

  • 0 se as sequências forem equivalentes.

Comentários

A primeira sequência comparará menos se ela tiver o elemento menor do par desigual mais antigo nas sequências ou, se não existir nenhum par desigual, mas a primeira sequência for menor.

A função membro retorna do_compare( first1, last1, first2, last2).

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;
}

agrupar::d o_compare

Uma função virtual chamada para comparar duas sequências de caracteres de acordo com as igualdades ou desigualdades das respectivas regras específicas de faceta.

virtual int do_compare(const CharType* first1,
    const CharType* last1,
    const CharType* first2,
    const CharType* last2) const;

Parâmetros

first1
Ponteiro para o primeiro elemento na primeira sequência a ser comparada.

last1
Ponteiro para o último elemento na primeira sequência a ser comparada.

first2
Ponteiro para o primeiro elemento na segunda sequência a ser comparada.

last2
Ponteiro para o último elemento na segunda sequência a ser comparada.

Valor de retorno

A função membro retornará:

  • –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 sequência.

  • 0 se as sequências forem equivalentes.

Comentários

A função membro virtual protegida 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 comparará menos se ela tiver o elemento menor do par desigual mais antigo nas sequências ou, se não existir nenhum par desigual, mas a primeira sequência for menor.

Exemplo

Consulte o exemplo de collate::compare, que chama do_compare.

agrupar::d o_hash

Uma função virtual chamada para determinar o valor de hash das sequências de acordo com as respectivas regras específicas de faceta.

virtual long do_hash(const CharType* first, const CharType* last) const;

Parâmetros

first
Um ponteiro para o primeiro caractere na sequência cujo valor será determinado.

last
Um ponteiro para o último caractere na sequência cujo valor será determinado.

Valor de retorno

Um valor de hash do tipo long da sequência.

Comentários

Um valor de hash pode ser útil, por exemplo, na distribuição de sequências de maneira pseudo-aleatória em uma matriz de listas.

Exemplo

Consulte o exemplo de hash, que chama do_hash.

agrupar::d o_transform

Uma função virtual chamada para converter 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 da mesma forma da mesma localidade.

virtual string_type do_transform(const CharType* first, const CharType* last) const;

Parâmetros

first
Um ponteiro para o primeiro caractere na sequência a ser convertida.

last
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 transformados.

Comentários

A função membro virtual protegida retorna um objeto da classe string_type cuja sequência controlada é uma cópia da sequência [ first, last). Se uma classe derivada de collate<CharType> substituir do_compare, ela também deverá substituir do_transform para haver correspondência. 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 serem comparadas na classe derivada.

Exemplo

Consulte o exemplo de transform, que chama do_transform.

agrupar::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

first
Um ponteiro para o primeiro caractere na sequência cujo valor será determinado.

last
Um ponteiro para o último caractere na sequência cujo valor será determinado.

Valor de retorno

Um valor de hash do tipo long da sequência.

Comentários

A função membro retorna do_hash( first, last).

Um valor de hash pode ser útil, por exemplo, na distribuição de sequências de maneira pseudo-aleatória 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;

Comentários

O tipo descreve uma especialização do modelo de classe basic_string cujos objetos podem armazenar cópias das sequências de origem.

Exemplo

Para obter um exemplo de como declarar e usar string_type, consulte transform.

collate::transform

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 da mesma forma da mesma localidade.

string_type transform(const CharType* first, const CharType* last) const;

Parâmetros

first
Um ponteiro para o primeiro caractere na sequência a ser convertida.

last
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 transformados.

Comentários

A função 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

Confira também

<locale>
Acesso Thread-Safe na Biblioteca Padrão C++