Delen via


Klasse sorteren

Een klassesjabloon die een object beschrijft dat kan fungeren als een facet voor landinstellingen om de volgorde en groepering van tekens binnen een tekenreeks te bepalen, vergelijkingen tussen deze objecten en de hashing van tekenreeksen.

Syntaxis

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

Parameterwaarden

CharType
Het type dat in een programma wordt gebruikt om tekens te coderen.

Opmerkingen

Net als bij een facet van de landinstelling heeft de statische object-id een initiële opgeslagen waarde van nul. De eerste poging om toegang te krijgen tot de opgeslagen waarde slaat een unieke positieve waarde op in id. In sommige talen worden tekens gegroepeerd en behandeld als één teken, en in andere talen worden afzonderlijke tekens behandeld alsof ze twee tekens zijn. De samenvouwservices die worden geleverd door de collateklasse bieden de manier om deze gevallen te sorteren.

Constructeurs

Constructeur Beschrijving
sorteren De constructor voor objecten van klasse collate die fungeert als een facet voor het afhandelen van tekenreekssorteringsconventies.

Typedefs

Typenaam Beschrijving
char_type Een type dat een teken van het type CharTypebeschrijft.
string_type Een type dat een tekenreeks basic_string beschrijft die tekens van het type bevat CharType.

Functies voor leden

Lid, functie Beschrijving
vergelijken Vergelijkt twee tekenreeksen op basis van hun facetspecifieke regels voor gelijkheid of ongelijkheid.
do_compare Een virtuele functie die wordt aangeroepen om twee tekenreeksen te vergelijken op basis van hun facetspecifieke regels voor gelijkheid of ongelijkheid.
do_hash Een virtuele functie die wordt aangeroepen om de hashwaarde van reeksen te bepalen volgens de facetspecifieke regels.
do_transform Een virtuele functie die wordt aangeroepen om een tekenreeks van een landinstelling te converteren naar een tekenreeks die kan worden gebruikt in lexicografische vergelijkingen met andere tekenreeksen die op dezelfde manier worden geconverteerd vanuit dezelfde landinstelling.
hekje Bepaalt de hash-waarde van de reeks volgens de facetspecifieke regels.
transformeren Converteert een tekenreeks van een landinstelling naar een tekenreeks die kan worden gebruikt in lexicografische vergelijkingen met andere tekenreeksen die op dezelfde manier worden geconverteerd vanuit dezelfde landinstelling.

Behoeften

Rubriek:<oord>

naamruimte: std

collate::char_type

Een type dat een teken van het type CharTypebeschrijft.

typedef CharType char_type;

Opmerkingen

Het type is een synoniem voor de sjabloonparameter CharType.

collate::collate

De constructor voor objecten van klasse-collate die fungeert als een landinstelling facet voor het verwerken van tekenreekssorteringsconventies.

public:
    explicit collate(
    size_t _Refs = 0);

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

Parameterwaarden

_Refs
Een geheel getal dat wordt gebruikt om het type geheugenbeheer voor het object op te geven.

_Locname
De naam van de landinstelling.

Opmerkingen

De mogelijke waarden voor de parameter _Refs en hun significantie zijn:

  • 0: De levensduur van het object wordt beheerd door de landinstellingen die het object bevatten.

  • 1: De levensduur van het object moet handmatig worden beheerd.

  • > 1: Deze waarden zijn niet gedefinieerd.

De constructor initialiseert het basisobject met landinstelling::facet(_Refs).

collate::compare

Vergelijkt twee tekenreeksen op basis van hun facetspecifieke regels voor gelijkheid of ongelijkheid.

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

Parameterwaarden

eerste1
Wijs het eerste element in de eerste volgorde aan dat moet worden vergeleken.

laatste
Wijs het laatste element in de eerste volgorde aan dat moet worden vergeleken.

eerste2
Wijs het eerste element in de tweede volgorde aan dat moet worden vergeleken.

last2
Wijs het laatste element in de tweede volgorde aan dat moet worden vergeleken.

Retourwaarde

De lidfunctie retourneert:

  • -1 als de eerste reeks kleiner is dan de tweede reeks.

  • +1 als de tweede reeks kleiner is dan de eerste reeks.

  • 0 als de reeksen gelijkwaardig zijn.

Opmerkingen

De eerste reeks vergelijkt minder als het kleinere element in het vroegste ongelijke paar in de reeksen staat of, als er geen ongelijke paren bestaan, maar de eerste reeks korter is.

De lidfunctie retourneert do_compare(first1, last1, first2, ). last2

Voorbeeld

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

Een virtuele functie die wordt aangeroepen om twee tekenreeksen te vergelijken op basis van hun facetspecifieke regels voor gelijkheid of ongelijkheid.

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

Parameterwaarden

eerste1
Wijs het eerste element in de eerste volgorde aan dat moet worden vergeleken.

laatste
Wijs het laatste element in de eerste volgorde aan dat moet worden vergeleken.

eerste2
Wijs het eerste element in de tweede volgorde aan dat moet worden vergeleken.

last2
Wijs het laatste element in de tweede volgorde aan dat moet worden vergeleken.

Retourwaarde

De lidfunctie retourneert:

  • -1 als de eerste reeks kleiner is dan de tweede reeks.

  • +1 als de tweede reeks kleiner is dan de eerste reeks.

  • 0 als de reeksen gelijkwaardig zijn.

Opmerkingen

De beveiligde virtuele lidfunctie vergelijkt de reeks op [ * first1, Last1)* met de reeks op [ eerste2, laatste2). Hiermee worden waarden vergeleken door tussen paren van overeenkomende elementen van het type operator<toe te passenCharType. De eerste reeks vergelijkt minder als het kleinere element in het vroegste ongelijke paar in de reeksen bestaat of als er geen ongelijke paren bestaan, maar de eerste reeks korter is.

Voorbeeld

Zie het voorbeeld voor het sorteren::vergelijken, die aanroepen do_compare.

collate::d o_hash

Een virtuele functie die wordt aangeroepen om de hashwaarde van reeksen te bepalen volgens de facetspecifieke regels.

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

Parameterwaarden

eerste
Een aanwijzer naar het eerste teken in de reeks waarvan de waarde moet worden bepaald.

laatste
Een aanwijzer naar het laatste teken in de reeks waarvan de waarde moet worden bepaald.

Retourwaarde

Een hash-waarde van het type long voor de reeks.

Opmerkingen

Een hash-waarde kan bijvoorbeeld handig zijn bij het distribueren van reeksen pseudo-willekeurig over een matrix met lijsten.

Voorbeeld

Zie het voorbeeld voor hash, die aanroept do_hash.

collate::d o_transform

Een virtuele functie die wordt aangeroepen om een tekenreeks van een landinstelling te converteren naar een tekenreeks die kan worden gebruikt in lexicografische vergelijkingen met andere tekenreeksen die op dezelfde manier worden geconverteerd vanuit dezelfde landinstelling.

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

Parameterwaarden

eerste
Een aanwijzer naar het eerste teken in de reeks die moet worden geconverteerd.

laatste
Een aanwijzer naar het laatste teken in de reeks dat moet worden geconverteerd.

Retourwaarde

Een tekenreeks die de getransformeerde tekenreeks is.

Opmerkingen

De beveiligde functie virtueel lid retourneert een object van klasse string_type waarvan de gecontroleerde reeks een kopie is van de reeks [ first, last). Als een klasse die is afgeleid van het verzamelen< vanCharType-onderdrukkingen>do_compare, moet deze ook worden overschreven do_transform om overeen te komen. Wanneer deze worden doorgegeven aan collate::compare, moeten twee getransformeerde tekenreeksen hetzelfde resultaat opleveren dat u krijgt van het doorgeven van de niet-getransformeerde tekenreeksen om te vergelijken in de afgeleide klasse.

Voorbeeld

Zie het voorbeeld voor transformatie, die aanroept do_transform.

collate::hash

Bepaalt de hash-waarde van de reeks volgens de facetspecifieke regels.

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

Parameterwaarden

eerste
Een aanwijzer naar het eerste teken in de reeks waarvan de waarde moet worden bepaald.

laatste
Een aanwijzer naar het laatste teken in de reeks waarvan de waarde moet worden bepaald.

Retourwaarde

Een hash-waarde van het type long voor de reeks.

Opmerkingen

De lidfunctie retourneert do_hash(first, last).

Een hash-waarde kan bijvoorbeeld handig zijn bij het distribueren van reeksen pseudo-willekeurig over een matrix met lijsten.

Voorbeeld

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

Een type dat een tekenreeks basic_string beschrijft die tekens van het type bevat CharType.

typedef basic_string<CharType> string_type;

Opmerkingen

Het type beschrijft een specialisatie van klassesjabloon basic_string waarvan objecten kopieën van de bronvolgorde kunnen opslaan.

Voorbeeld

Zie string_type voor een voorbeeld van hoe u declareert en gebruikt.

collate::transform

Converteert een tekenreeks van een landinstelling naar een tekenreeks die kan worden gebruikt in lexicografische vergelijkingen met andere tekenreeksen die op dezelfde manier worden geconverteerd vanuit dezelfde landinstelling.

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

Parameterwaarden

eerste
Een aanwijzer naar het eerste teken in de reeks die moet worden geconverteerd.

laatste
Een aanwijzer naar het laatste teken in de reeks dat moet worden geconverteerd.

Retourwaarde

Een tekenreeks die de getransformeerde tekenreeks bevat.

Opmerkingen

De lidfunctie retourneert do_transform(first, last).

Voorbeeld

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

Zie ook

<oord>
Thread Safety in de standaardbibliotheek van C++