std::collate
Определён в заголовочном файле <locale> | ||
|---|---|---|
template< class CharT > class collate; |
Класс std::collate инкапсулирует зависящие от локали правила сортировки (сравнения) и хеширования строк. Эта фасета используется в std::basic_regex и может применяться с помощью std::locale::operator() непосредственно ко всем стандартным алгоритмам, которым требуется предикат сравнения строк.
Диаграмма наследования
Специализации
Стандартная библиотека гарантированно предоставляет следующие специализации (они должны быть реализованы любым объектом локали):
Определены в заголовочном файле <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
См. также
| лексикографически сравнивает две строки, используя фасету collate этой локали (функция-член класса std::locale) |
|
представляет предоставляемую системой std::collate для локали с указанным именем (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/locale/collate