Класс 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