Namespaces
Variants

std:: collate

From cppreference.net
Определено в заголовочном файле <locale>
template < class CharT >
class collate ;

Класс std::collate инкапсулирует зависящие от локали правила сравнения и хеширования строк. Этот аспект используется std::basic_regex и может быть применен, посредством std::locale::operator() , непосредственно ко всем стандартным алгоритмам, которые ожидают предикат сравнения строк.

cpp/locale/locale/facet std-collate-inheritance.svg

Диаграмма наследования

Содержание

Специализации

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

Определено в заголовке <locale>
std :: collate < char > реализует лексикографическое упорядочивание байтовых строк
std :: collate < wchar_t > реализует лексикографическое упорядочивание широких строк

Вложенные типы

Тип Определение
char_type CharT
string_type std:: basic_string < CharT >

Члены данных

Участник Описание
std::locale::id id [static] идентификатор аспекта

Функции-члены

создает новый collate аспект
(публичная функция-член)
уничтожает collate аспект
(защищенная функция-член)
вызывает do_compare
(публичная функция-член)
вызывает do_transform
(публичная функция-член)
вызывает do_hash
(публичная функция-член)

Защищенные функции-члены

[virtual]
сравнивает две строки, используя правила сортировки этого аспекта
(виртуальная защищенная функция-член)
[virtual]
преобразует строку так, чтобы сортировка могла быть заменена сравнением
(виртуальная защищенная функция-член)
[virtual]
генерирует целочисленное хэш-значение, используя правила сортировки этого аспекта
(виртуальная защищенная функция-член)

Пример

#include <algorithm>
#include <iostream>
#include <locale>
#include <string>
#include <vector>
int main()
{
    std::locale::global(std::locale("en_US.utf8"));
    std::wcout.imbue(std::locale(""));
    std::vector<std::wstring> v
    {
        L"ar", L"zebra", L"\u00f6grupp", L"Zebra",
        L"\u00e4ngel",L"\u00e5r", L"f\u00f6rnamn"
    };
    std::wcout << "Default locale collation order: ";
    std::sort(v.begin(), v.end());
    for (auto s : v)
        std::wcout << s << ' ';
    std::wcout << '\n';
    std::wcout << "English locale collation order: ";
    std::sort(v.begin(), v.end(), std::locale("en_US.UTF-8"));
    for (auto s : v)
        std::wcout << s << ' ';
    std::wcout << '\n';
    std::wcout << "Swedish locale collation order: ";
    std::sort(v.begin(), v.end(), std::locale("sv_SE.UTF-8"));
    for (auto s : v)
        std::wcout << s << ' ';
    std::wcout << '\n';
}

Вывод:

Default locale collation order: Zebra ar förnamn zebra ängel år ögrupp
English locale collation order: ängel ar år förnamn ögrupp zebra Zebra
Swedish locale collation order: ar förnamn zebra Zebra år ängel ögrupp

Смотрите также

лексикографически сравнивает две строки, используя фасет сравнения данной локали
(публичная функция-член std::locale )
представляет предоставляемый системой std::collate для именованной локали
(шаблон класса)