Spec-Zone.ru › C++

std::collate

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

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

cpp/locale/locale/facet

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

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

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

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

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

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

Поля данных

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

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

(конструктор)
создаёт новую фасету collate
(открытая функция-член)
(деструктор)
уничтожает фасету collate
(защищённая функция-член)
compare
вызывает do_compare
(открытая функция-член)
transform
вызывает do_transform
(открытая функция-член)
hash
вызывает do_hash
(открытая функция-член)

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

do_compare
[virtual]
сравнивает две строки, используя правила сортировки этой фасеты
(виртуальная защищённая функция-член)
do_transform
[virtual]
преобразует строку так, чтобы сортировку можно было заменить сравнением
(виртуальная защищённая функция-член)
do_hash
[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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/locale/collate

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API