std::collate
来自 cppreference.com
定义在头文件 <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> |
[编辑] 成员函数
构造一个新的 collate 方面(公有成员函数) | |
析构一个 collate 方面(受保护成员函数) | |
调用 do_compare (公有成员函数) | |
调用 do_transform (公有成员函数) | |
调用 do_hash (公有成员函数) |
[编辑] 成员对象
static std::locale::id id |
区域设置的 id (公有成员对象) |
[编辑] 受保护成员函数
[虚函数] |
使用此方面的排序规则比较两个字符串 (虚函数受保护成员函数) |
[虚函数] |
转换字符串,以便排序可以替换为比较 (虚函数受保护成员函数) |
[虚函数] |
使用此方面的排序规则生成一个整数哈希值 (虚函数受保护成员函数) |
[编辑] 示例
运行此代码
#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 (类模板) |