Spec-Zone.ru › C++

std::collate

Определено в заголовке <locale>
template< class CharT >
class collate;

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

cpp/locale/locale/facetstd-collate-inheritance.svg

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

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

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

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

Типы членов

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

Члены-функции

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

Члены-объекты

static std::locale::id id
id локали
(публичный член-объект)

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

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()
лексикографически сравнивает две строки с использованием фасета сортировки этой локали
(публичная функция-член std::locale)
collate_byname
представляет системно-предоставленный фасет сортировки для указанной локали
(шаблон класса)

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

Spec-Zone.ru

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