sortera klass

En klassmall som beskriver ett objekt som kan fungera som en språkvariant för att styra ordningen och gruppering av tecken i en sträng, jämförelser mellan dem och hashning av strängar.

Syntax

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

Parameterar

CharType
Den typ som används i ett program för att koda tecken.

Anmärkningar

Precis som med alla nationella aspekter har det statiska objekt-ID:t ett initialt lagrat värde på noll. Det första försöket att komma åt dess lagrade värde lagrar ett unikt positivt värde i id. På vissa språk grupperas och behandlas tecken som ett enda tecken, och i andra behandlas enskilda tecken som om de vore två tecken. De sorteringstjänster som tillhandahålls av sorteringsklassen är ett sätt att sortera dessa fall.

Konstruktörer

Konstruktor Beskrivning
kollationera Konstruktorn för objekt av klass collate som fungerar som språkvariant för att hantera strängsorteringskonventioner.

Typedefs

Typnamn Beskrivning
char_type En typ som beskriver ett tecken av typen CharType.
string_type En typ som beskriver en sträng av typen basic_string som innehåller tecken av typen CharType.

Medlemsfunktioner

Medlemsfunktion Beskrivning
jämföra Jämför två teckensekvenser enligt deras fasetterade regler för likhet eller ojämlikhet.
do_compare En virtuell funktion som anropas för att jämföra två teckensekvenser enligt deras fasetterade regler för likhet eller ojämlikhet.
do_hash En virtuell funktion som anropas för att fastställa hashvärdet för sekvenser enligt deras fasetterade regler.
do_transform En virtuell funktion som anropas för att konvertera en teckensekvens från ett språk till en sträng som kan användas i lexikala jämförelser med andra teckensekvenser som på liknande sätt konverteras från samma språk.
hash- Avgör hashvärdet för sekvensen enligt deras fasetterade regler.
transformera Konverterar en teckensekvens från ett språk till en sträng som kan användas i lexikografiska jämförelser med andra teckensekvenser som på liknande sätt konverteras från samma språk.

Kravspecifikation

Rubrik:<Locale>

namnområde: std

collate::char_type

En typ som beskriver ett tecken av typen CharType.

typedef CharType char_type;

Anmärkningar

Typen är en synonym för mallparametern CharType.

collate::collate

Konstruktorn för objekt av klasssortering som fungerar som språkvariant för att hantera strängsorteringskonventioner.

public:
    explicit collate(
    size_t _Refs = 0);

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

Parameterar

_Refs
Heltalsvärde som används för att ange typ av minneshantering för objektet.

_Locname
Namnet på språkvarianten.

Anmärkningar

Möjliga värden för parametern _Refs och deras betydelse är:

  • 0: Objektets livslängd hanteras av de nationella inställningar som innehåller det.

  • 1: Objektets livslängd måste hanteras manuellt.

  • > 1: Dessa värden har inte definierats.

Konstruktorn initierar sitt basobjekt med språkvariant::facet(_Refs).

collate::compare

Jämför två teckensekvenser enligt deras fasetterade regler för likhet eller ojämlikhet.

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

Parameterar

första1
Pekare till det första elementet i den första sekvensen som ska jämföras.

senaste1
Pekare till det sista elementet i den första sekvensen som ska jämföras.

första2
Pekare till det första elementet i den andra sekvensen som ska jämföras.

senaste 2
Pekare till det sista elementet i den andra sekvensen som ska jämföras.

Returvärde

Medlemsfunktionen returnerar:

  • -1 om den första sekvensen jämför mindre än den andra sekvensen.

  • +1 om den andra sekvensen jämför mindre än den första sekvensen.

  • 0 om sekvenserna är likvärdiga.

Anmärkningar

Den första sekvensen jämför mindre om den har det mindre elementet i det tidigaste ojämlika paret i sekvenserna, eller, om det inte finns några ojämna par, men den första sekvensen är kortare.

Medlemsfunktionen returnerar do_compare(first1, last1, first2, last2).

Exempel

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

En virtuell funktion som anropas för att jämföra två teckensekvenser enligt deras fasetterade regler för likhet eller ojämlikhet.

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

Parameterar

första1
Pekare till det första elementet i den första sekvensen som ska jämföras.

senaste1
Pekare till det sista elementet i den första sekvensen som ska jämföras.

första2
Pekare till det första elementet i den andra sekvensen som ska jämföras.

senaste 2
Pekare till det sista elementet i den andra sekvensen som ska jämföras.

Returvärde

Medlemsfunktionen returnerar:

  • -1 om den första sekvensen jämför mindre än den andra sekvensen.

  • +1 om den andra sekvensen jämför mindre än den första sekvensen.

  • 0 om sekvenserna är likvärdiga.

Anmärkningar

Den skyddade virtuella medlemsfunktionen jämför sekvensen vid [ * first1, Last1)* med sekvensen vid [ first2, last2). Den jämför värden genom att tillämpa operator< mellan par av motsvarande element av typen CharType. Den första sekvensen jämför mindre om den har det mindre elementet i det tidigaste ojämlika paret i sekvenserna eller om det inte finns några ojämna par men den första sekvensen är kortare.

Exempel

Se exemplet för collate::compare, som anropar do_compare.

collate::d o_hash

En virtuell funktion som anropas för att fastställa hashvärdet för sekvenser enligt deras fasetterade regler.

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

Parameterar

första
En pekare till det första tecknet i sekvensen vars värde ska fastställas.

senaste
En pekare till det sista tecknet i sekvensen vars värde ska fastställas.

Returvärde

Ett hashvärde av typen long för sekvensen.

Anmärkningar

Ett hash-värde kan till exempel vara användbart när du distribuerar sekvenser pseudo-slumpmässigt över en matris med listor.

Exempel

Se exemplet för hash, som anropar do_hash.

collate::d o_transform

En virtuell funktion som anropas för att konvertera en teckensekvens från ett språk till en sträng som kan användas i lexikala jämförelser med andra teckensekvenser som på liknande sätt konverteras från samma språk.

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

Parameterar

första
En pekare till det första tecknet i sekvensen som ska konverteras.

senaste
En pekare till det sista tecknet i sekvensen som ska konverteras.

Returvärde

En sträng som är den transformerade teckensekvensen.

Anmärkningar

Funktionen skyddad virtuell medlem returnerar ett objekt av klass string_type vars kontrollerade sekvens är en kopia av sekvensen [ first, last). Om en klass som härleds från sortering< avCharType> åsidosätter do_compare bör den också åsidosättas do_transform för att matcha. När de skickas till collate::comparebör två transformerade strängar ge samma resultat som du skulle få från att skicka de otransformerade strängarna att jämföra i den härledda klassen.

Exempel

Se exemplet för transformering, som anropar do_transform.

collate::hash

Avgör hashvärdet för sekvensen enligt deras fasetterade regler.

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

Parameterar

första
En pekare till det första tecknet i sekvensen vars värde ska fastställas.

senaste
En pekare till det sista tecknet i sekvensen vars värde ska fastställas.

Returvärde

Ett hashvärde av typen long för sekvensen.

Anmärkningar

Medlemsfunktionen returnerar do_hash(first, last).

Ett hash-värde kan till exempel vara användbart när du distribuerar sekvenser pseudo-slumpmässigt över en matris med listor.

Exempel

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

En typ som beskriver en sträng av typen basic_string som innehåller tecken av typen CharType.

typedef basic_string<CharType> string_type;

Anmärkningar

Typen beskriver en specialisering av klassmallen basic_string vars objekt kan lagra kopior av källsekvensen.

Exempel

Ett exempel på hur du deklarerar och använder string_typefinns i transformering.

collate::transform

Konverterar en teckensekvens från ett språk till en sträng som kan användas i lexikografiska jämförelser med andra teckensekvenser som på liknande sätt konverteras från samma språk.

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

Parameterar

första
En pekare till det första tecknet i sekvensen som ska konverteras.

senaste
En pekare till det sista tecknet i sekvensen som ska konverteras.

Returvärde

En sträng som innehåller den transformerade teckensekvensen.

Anmärkningar

Medlemsfunktionen returnerar do_transform(first, last).

Exempel

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

Se även

<Locale>
Trådsäkerhet i C++ Standard Library