std::collate

来自cppreference.com
< cpp‎ | locale
 
 
本地化库
本地环境与平面
本地环境
平面类别基类
ctype(字符类别)平面
numeric(数值)平面
collate(对照比较)平面
collate
time(时间)平面
monetary(货币)平面
messages(消息)平面
字符分类与转换
字符分类
转换
编码转换平面
(C++11)    
C 本地环境
 
 
在标头 <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 平面
(受保护成员函数)
调用 do_compare
(公开成员函数)
调用 do_transform
(公开成员函数)
调用 do_hash
(公开成员函数)

成员对象

static std::locale::id id
本地环境的 id
(公开成员对象)

受保护成员函数

用此平面的对照规则比较二个字符串
(虚受保护成员函数)
变换字符串,使得能用比较替换对照
(虚受保护成员函数)
生成使用此平面对照规则的整数哈希值
(虚受保护成员函数)

示例

#include <locale>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
 
int main()
{
    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 << "默认本地环境对照顺序:  ";
    std::sort(v.begin(), v.end());
    for (auto s : v)
        std::wcout << s << ' '; std::wcout << '\n';
 
    std::wcout << "英文本地环境对照顺序:  ";
    std::sort(v.begin(), v.end(), std::locale("en_US.UTF-8"));
    for (auto s : v)
        std::wcout << s << ' '; std::wcout << '\n';
 
    std::wcout << "瑞典文本地环境对照顺序:";
    std::sort(v.begin(), v.end(), std::locale("sv_SE.UTF-8"));
    for (auto s : v)
        std::wcout << s << ' '; std::wcout << '\n';
}

输出:

默认本地环境对照顺序:  Zebra ar förnamn zebra ängel år ögrupp
英文本地环境对照顺序:  ängel ar år förnamn ögrupp zebra Zebra
瑞典文本地环境对照顺序:ar förnamn zebra Zebra år ängel ögrupp

参阅

用此 locale 的 collate 刻面以字典序比较两个字符串
(std::locale 的公开成员函数)
表示系统提供的具名本地环境的 std::collate
(类模板)