Поделиться через


Класс collate

Шаблон класса, описывающий объект, который может служить аспектом языкового стандарта для управления упорядочением и группировкой символов в строке, сравнениями между ними и хэшированием строк.

Синтаксис

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

Параметры

CharType
Тип, используемый внутри программы для кодирования символов.

Замечания

Как и в случае любого другого аспекта языкового стандарта, начальное сохраненное значение статического идентификатора объекта равно нулю. Первая попытка получить доступ к сохраненному значению сохранит уникальное положительное значение в id. В одних языка символы группируются и обрабатываются как один символ, в других отдельные символы обрабатываются так, как если бы каждый из них представлял собой два символа. Службы упорядочивания, предоставленные классом collate, обеспечивают способ сортировки в таких случаях.

Конструкторы

Конструктор Description
collate Конструктор для объектов класса collate, который служит в качестве аспекта языкового стандарта для обработки преобразований сортировки строк.

Определения типов

Введите имя Description
char_type Тип, описывающий символ типа CharType.
string_type Тип, описывающий строку типа basic_string, содержащую символы типа CharType.

Функции элементов

Функция-член Description
compare Проверяет две последовательности символов на равенство или неравенство в соответствии с правилами для конкретных аспектов.
do_compare Виртуальная функция, вызываемая для проверки двух последовательностей символов на равенство или неравенство в соответствии с правилами для конкретных аспектов.
do_hash Виртуальная функция, вызываемая для определения хэш-значения последовательностей в соответствии с правилами для конкретных аспектов.
do_transform Виртуальная функция, вызываемая для преобразования последовательности символов из языкового стандарта в строку, которая может быть использована для лексикографического сравнения с другими последовательностями символов, аналогичным образом преобразованными из того же языкового стандарта.
hash Определяет хэш-значение последовательности в соответствии с правилами для конкретных аспектов.
transform Преобразует последовательность символов из языкового стандарта в строку, которая может быть использована для лексикографического сравнения с другими последовательностями символов, аналогичным образом преобразованными из того же языкового стандарта.

Требования

Заголовок:<языковой стандарт>

Пространство имен: std

collate::char_type

Тип, описывающий символ типа CharType.

typedef CharType char_type;

Замечания

Этот тип является синонимом для параметра шаблона CharType.

collate::collate

Конструктор для объектов класса collate, который служит в качестве аспекта языкового стандарта для обработки преобразований сортировки строк.

public:
    explicit collate(
    size_t _Refs = 0);

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

Параметры

_Refs
Целочисленное значение, используемое для указания типа управления памятью для объекта.

_Locname
Имя языкового стандарта.

Замечания

Возможные значения параметра _Refs и их значение:

  • 0: время существования объекта управляется языковыми стандартами, которые его содержат.

  • 1: время существования объекта должно управляться вручную.

  • > 1. Эти значения не определены.

Конструктор инициализирует базовый объект с помощью языкового стандарта::facet(_Refs).

collate::compare

Проверяет две последовательности символов на равенство или неравенство в соответствии с правилами для конкретных аспектов.

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

Параметры

first1
Указатель на первый элемент в первой последовательности для сравнения.

last1
Указатель на последний элемент в первой последовательности для сравнения.

first2
Указатель на первый элемент во второй последовательности для сравнения.

last2
Указатель на последний элемент во второй последовательности для сравнения.

Возвращаемое значение

Функция-член возвращает:

  • –1, если первая последовательность оказывается меньше, чем вторая;

  • –1, если вторая последовательность оказывается меньше, чем первая.

  • 0, если последовательности являются эквивалентными.

Замечания

Первая последовательность оценивается как меньшая, если в ней находится меньший элемент в первой неравной паре значений последовательностей или если неравные пары отсутствуют, но первая последовательность короче.

Функция-член возвращает do_compare(first1, last1, first2, last2).

Пример

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

Виртуальная функция, вызываемая для проверки двух последовательностей символов на равенство или неравенство в соответствии с правилами для конкретных аспектов.

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

Параметры

first1
Указатель на первый элемент в первой последовательности для сравнения.

last1
Указатель на последний элемент в первой последовательности для сравнения.

first2
Указатель на первый элемент во второй последовательности для сравнения.

last2
Указатель на последний элемент во второй последовательности для сравнения.

Возвращаемое значение

Функция-член возвращает:

  • –1, если первая последовательность оказывается меньше, чем вторая;

  • –1, если вторая последовательность оказывается меньше, чем первая.

  • 0, если последовательности являются эквивалентными.

Замечания

Функция защищенного виртуального члена сравнивает последовательность [ * first1, Last1)* с последовательностью [ first2, last2). Он сравнивает значения путем применения operator< между парами соответствующих элементов типа CharType. Первая последовательность оценивается как меньшая, если в ней находится меньший элемент в первой неравной паре значений последовательностей или если неравные пары отсутствуют, но первая последовательность короче.

Пример

См. пример для collate::compare, в котором вызывается метод do_compare.

collate::d o_hash

Виртуальная функция, вызываемая для определения хэш-значения последовательностей в соответствии с правилами для конкретных аспектов.

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

Параметры

first
Указатель на первый символ в последовательности, чье хэш-значение требуется определить.

last
Указатель на последний символ в последовательности, чье хэш-значение требуется определить.

Возвращаемое значение

Хэш-значение типа long для последовательности.

Замечания

Хэш-значение может быть полезно, например при псевдослучайном распределении последовательностей по массиву списков.

Пример

См. пример для hash, в котором вызывается do_hash.

collate::d o_transform

Виртуальная функция, вызываемая для преобразования последовательности символов из языкового стандарта в строку, которая может быть использована для лексикографического сравнения с другими последовательностями символов, аналогичным образом преобразованными из того же языкового стандарта.

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

Параметры

first
Указатель на первый символ в преобразуемой последовательности.

last
Указатель на последний символ в преобразуемой последовательности.

Возвращаемое значение

Строка, представляющая преобразованную последовательность символов.

Замечания

Защищенная виртуальная функция-член возвращает объект класса string_type, управляемая последовательность которого является копией последовательности [first, last). Если класс, производный от сортировки CharType>, переопределяет do_compare, он также должен переопределить do_transform для сопоставления.< При передаче в collate::compare две преобразованные строки должны дать тот же результат, который был бы получен при передаче непреобразованных строк для сравнения в производном классе.

Пример

См. пример для transform, в котором вызывается do_transform.

collate::hash

Определяет хэш-значение последовательности в соответствии с правилами для конкретных аспектов.

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

Параметры

first
Указатель на первый символ в последовательности, чье хэш-значение требуется определить.

last
Указатель на последний символ в последовательности, чье хэш-значение требуется определить.

Возвращаемое значение

Хэш-значение типа long для последовательности.

Замечания

Функция-член возвращает do_hash(first, last).

Хэш-значение может быть полезно, например при псевдослучайном распределении последовательностей по массиву списков.

Пример

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

Тип, описывающий строку типа basic_string, содержащую символы типа CharType.

typedef basic_string<CharType> string_type;

Замечания

Тип описывает специализацию шаблона класса basic_string объекты которых могут хранить копии исходной последовательности.

Пример

См. пример объявления и использования string_type в разделе transform.

collate::transform

Преобразует последовательность символов из языкового стандарта в строку, которая может быть использована для лексикографического сравнения с другими последовательностями символов, аналогичным образом преобразованными из того же языкового стандарта.

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

Параметры

first
Указатель на первый символ в преобразуемой последовательности.

last
Указатель на последний символ в преобразуемой последовательности.

Возвращаемое значение

Строка, содержащая преобразованную последовательность символов.

Замечания

Функция-член возвращает do_transform(first, last).

Пример

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

См. также

<локаль>
Потокобезопасность в стандартной библиотеке C++