Sdílet prostřednictvím


collate – třída

Šablona třídy popisující objekt, který může sloužit jako omezující vlastnost národního prostředí pro řízení řazení a seskupení znaků v řetězci, porovnání mezi nimi a hashování řetězců.

Syntaxe

template <class CharType>
class collate : public locale::facet;

Parametry

CharType
Typ používaný v rámci programu ke kódování znaků.

Poznámky

Stejně jako u omezující vlastnosti národního prostředí má ID statického objektu počáteční uloženou hodnotu nula. První pokus o přístup k uložené hodnotě ukládá jedinečnou kladnou hodnotu v id. V některých jazycích jsou znaky seskupeny a považovány za jeden znak a v jiných jsou jednotlivé znaky zpracovány tak, jako by se jednalo o dva znaky. Kolační služby poskytované kolační třídou poskytují způsob řazení těchto případů.

Konstruktory

Konstruktor Popis
kolacionovat Konstruktor pro objekty třídy collate , které slouží jako omezující vlastnost národního prostředí pro zpracování konvencí řazení řetězců.

Typedefs

Název typu Popis
char_type Typ, který popisuje znak typu CharType.
string_type Typ, který popisuje řetězec typu basic_string obsahující znaky typu CharType.

Členské funkce

Členová funkce Popis
porovnat Porovná dvě znakové sekvence podle pravidel na základě jejich omezujících vlastností a zjistí rovnost či nerovnost.
do_compare Virtuální funkce volaná k porovnání dvou znakových sekvencí podle pravidel na základě jejich omezujících vlastností a zjištění rovnosti či nerovnosti.
do_hash Virtuální funkce volaná k určení hodnoty hash sekvencí podle pravidel na základě jejich omezujících vlastností.
do_transform Virtuální funkce volaná k převedení znakové sekvence z národního prostředí na řetězec, který lze použít v lexikografických porovnáních s ostatními znakovými sekvencemi podobně převedenými ze stejného národního prostředí.
hašé Určí hodnotu hash sekvence podle pravidel na základě její omezující vlastnosti.
transformovat Převede znakovou sekvenci z národního prostředí na řetězec, který lze použít v lexikografických porovnáních s ostatními znakovými sekvencemi podobně převedenými ze stejného národního prostředí.

Požadavky

Záhlaví:<národní prostředí>

Obor názvů: std

kolace::char_type

Typ, který popisuje znak typu CharType.

typedef CharType char_type;

Poznámky

Typ je synonymem pro parametr CharTypešablony .

collate::collate

Konstruktor pro objekty kolace třídy, která slouží jako omezující vlastnost národního prostředí pro zpracování konvencí řazení řetězců.

public:
    explicit collate(
    size_t _Refs = 0);

protected:
    collate(
const char* _Locname,
    size_t _Refs = 0);

Parametry

_Refs
Celočíselná hodnota použitá k určení typu správy paměti pro objekt.

_Locname
Název národního prostředí.

Poznámky

Možné hodnoty pro parametr _Refs a jejich významnost jsou:

  • 0: Životnost objektu je spravována národními prostředími, které ho obsahují.

  • 1: Životnost objektu musí být spravována ručně.

  • > 1: Tyto hodnoty nejsou definovány.

Konstruktor inicializuje svůj základní objekt s národním prostředím ::facet(_Refs).

collate::compare

Porovná dvě znakové sekvence podle pravidel na základě jejich omezujících vlastností a zjistí rovnost či nerovnost.

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

Parametry

první 1
Ukazatel na první prvek v první sekvenci, který se má porovnat.

poslední 1
Ukazatel na poslední prvek v první sekvenci, který se má porovnat.

první2
Ukazatel na první prvek ve druhé sekvenci, který se má porovnat.

last2
Ukazatel na poslední prvek ve druhé sekvenci, který se má porovnat.

Návratová hodnota

Členová funkce vrátí:

  • -1, pokud první sekvence porovná menší než druhá sekvence.

  • +1, pokud druhá sekvence porovná menší než první sekvence.

  • 0, pokud jsou sekvence ekvivalentní.

Poznámky

První sekvence porovnává méně, pokud má menší prvek v nejstarší nerovné dvojici v sekvencích, nebo pokud neexistují žádné nerovné páry, ale první sekvence je kratší.

Členová funkce vrátí do_compare( first1, last1, first2, last2).

Příklad

// 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

Virtuální funkce volaná k porovnání dvou znakových sekvencí podle pravidel na základě jejich omezujících vlastností a zjištění rovnosti či nerovnosti.

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

Parametry

první 1
Ukazatel na první prvek v první sekvenci, který se má porovnat.

poslední 1
Ukazatel na poslední prvek v první sekvenci, který se má porovnat.

první2
Ukazatel na první prvek ve druhé sekvenci, který se má porovnat.

last2
Ukazatel na poslední prvek ve druhé sekvenci, který se má porovnat.

Návratová hodnota

Členová funkce vrátí:

  • -1, pokud první sekvence porovná menší než druhá sekvence.

  • +1, pokud druhá sekvence porovná menší než první sekvence.

  • 0, pokud jsou sekvence ekvivalentní.

Poznámky

Chráněná virtuální členová funkce porovnává sekvenci [ * první1, Last1)* se sekvencí v [ první2, poslední2). Porovnává hodnoty použitím operator< dvojic odpovídajících prvků typu CharType. První sekvence porovnává méně, pokud má menší prvek v nejstarší nerovné dvojici v sekvencích nebo pokud neexistují žádné nerovné dvojice, ale první sekvence je kratší.

Příklad

Podívejte se na příklad kolace ::compare, která volání do_compare.

collate::d o_hash

Virtuální funkce volaná k určení hodnoty hash sekvencí podle pravidel na základě jejich omezujících vlastností.

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

Parametry

první
Ukazatel na první znak v sekvenci, jehož hodnota má být určena.

poslední
Ukazatel na poslední znak v sekvenci, jehož hodnota má být určena.

Návratová hodnota

Hodnota hash typu long pro sekvenci.

Poznámky

Hodnota hash může být užitečná například při distribuci sekvencí pseudonáhodně napříč polem seznamů.

Příklad

Podívejte se na příklad hodnoty hash, která volá do_hash.

collate::d o_transform

Virtuální funkce volaná k převedení znakové sekvence z národního prostředí na řetězec, který lze použít v lexikografických porovnáních s ostatními znakovými sekvencemi podobně převedenými ze stejného národního prostředí.

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

Parametry

první
Ukazatel na první znak v sekvenci, který se má převést.

poslední
Ukazatel na poslední znak v sekvenci, který se má převést.

Návratová hodnota

Řetězec, který je transformovanou sekvencí znaků.

Poznámky

Chráněná virtuální členová funkce vrátí objekt třídy string_type , jehož řízená sekvence je kopií sekvence [ first, last). Pokud třída odvozená z kolace<CharType> přepisuje do_compare, měla by také přepsat do_transform , aby odpovídala. Při předání collate::comparedo , dva transformované řetězce by měly přinést stejný výsledek, který byste získali od předání nepřetvářených řetězců k porovnání v odvozené třídě.

Příklad

Podívejte se na příklad transformace, která volá do_transform.

collate::hash

Určí hodnotu hash sekvence podle pravidel na základě její omezující vlastnosti.

long hash(const CharType* first, const CharType* last) const;

Parametry

první
Ukazatel na první znak v sekvenci, jehož hodnota má být určena.

poslední
Ukazatel na poslední znak v sekvenci, jehož hodnota má být určena.

Návratová hodnota

Hodnota hash typu long pro sekvenci.

Poznámky

Členová funkce vrátí do_hash( first, last).

Hodnota hash může být užitečná například při distribuci sekvencí pseudonáhodně napříč polem seznamů.

Příklad

// 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

kolace::string_type

Typ, který popisuje řetězec typu basic_string obsahující znaky typu CharType.

typedef basic_string<CharType> string_type;

Poznámky

Typ popisuje specializaci šablony třídy basic_string , jejichž objekty mohou ukládat kopie zdrojové sekvence.

Příklad

Příklad, jak deklarovat a používat string_type, viz transformace.

kolace::transform

Převede znakovou sekvenci z národního prostředí na řetězec, který lze použít v lexikografických porovnáních s ostatními znakovými sekvencemi podobně převedenými ze stejného národního prostředí.

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

Parametry

první
Ukazatel na první znak v sekvenci, který se má převést.

poslední
Ukazatel na poslední znak v sekvenci, který se má převést.

Návratová hodnota

Řetězec, který obsahuje transformovanou posloupnost znaků.

Poznámky

Členová funkce vrátí do_transform(first, last).

Příklad

// 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

Viz také

<locale>
Bezpečný přístup z více vláken ve standardní knihovně C++