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::compare
do , 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++