c++11 标准模板(STL)(std::locale)(五)用此 locale 的 collate 刻面以字典序比较两个字符串

用以封装文化差异的多态刻面的集合


std::locale 类型对象是不可变平面的不可变索引集。 C++ 输入/输出库的每个流对象与一个 std::locale 对象关联,并用其平面分析及格式化所有数据。另外, locale 对象与每个 std::basic_regex 对象关联。 locale 对象亦可在标准容器和算法中用作进行字符串对照的谓词,而且能被直接访问,以获得或修改其所保有的平面。

C++ 程序中构造的每个 locale 至少保有下列标准平面,但程序可以定义额外特化,或全新的平面,并将它们添加到任何既存的 locale 对象。

用此 locale 的 collate 刻面以字典序比较两个字符串

std::locale::operator()
template< class CharT, class Traits, class Alloc >

bool operator()( const basic_string<CharT,Traits,Alloc>& s1,

                 const basic_string<CharT,Traits,Alloc>& s2) const;

按照此 locale 的 std::collate<charT> 平面所定义的比较规则,比较二个 string 参数 s1s2 。此运算符允许以任何拥有 collate 平面的 locale 对象为标准算法(如 std::sort )和有序容器( std::set )中的二元谓词。

参数

s1-要比较的第一字符串
s2-要比较的第二字符串

返回值

s1 按字典序小于 s2 则为 true ,否则为 false 。

可能的实现

template<class CharT, class Traits, class Alloc >
bool operator()(const std::basic_string<CharT,Traits,Alloc>& s1,const std::basic_string<CharT,Traits,Alloc>& s2) const;
{return std::use_facet<std::collate<CharT>>(*this).compare(s1.data(), s1.data() + s1.size(),s2.data(), s2.data() + s2.size()   ) < 0;
}

调用示例

#include <locale>
#include <algorithm>
#include <vector>
#include <string>
#include <cassert>
#include <iostream>
#include <codecvt>int main()
{std::vector<std::wstring> vector1 = {L"жил", L"был", L"кот"};std::sort(vector1.begin(), vector1.end(), std::locale("Chinese (Simplified)_China.936"));assert(vector1[0] == L"был");assert(vector1[1] == L"жил");assert(vector1[2] == L"кот");assert(vector1[0] != L"был");assert(vector1[1] != L"жил");assert(vector1[2] != L"кот");return 0;
}

输出

Assertion failed: vector1[0] != L"был", file ..\..\qt_code\locale\main.cpp, line 17

更改全局本地环境

std::locale::global

static locale global( const locale& loc );

loc 替换全局 C++ 本地环境,这表示将来所有对 std::locale 的默认构造函数的调用将返回 loc 的副本。若 loc 拥有名称,则亦如同用 std::setlocale(LC_ALL, loc.name().c_str()); 替换 C 本地环境。此函数是修改全局 C++ 本地环境的唯一方式,否则全局 C++ 本地环境等价于程序启动时的 std::locale::classic() 。

参阅

loc-新的全局 C++ locale

返回值

全局 C++ locale 的先前值。

获得到 "C" 本地环境的引用

std::locale::classic

static const locale& classic();

获得到实现经典 "C" 本地环境语义的 C++ 本地环境的引用。此本地环境不同于全局本地环境,不能改变。

参数

(无)

返回值

返回到 "C" 本地环境的引用。

注意

一些标准要求的平面,如 UTF-8/UTF-32 转换平面 std::codecvt<char32_t, char, std::mbstate_t> ,无 "C" 本地环境中的等价版本,然而它们存在于 std::locale::classic() 返回的 locale 中,同任何其他构造于 C++ 程序中的 locale 。

调用示例

#include <locale>
#include <clocale>
#include <algorithm>
#include <vector>
#include <string>
#include <cassert>
#include <iostream>
#include <codecvt>int main()
{std::locale locale1 = std::locale::classic();std::cout << "locale1.name():   " << locale1.name() << std::endl;std::locale::global(std::locale("Chinese (Simplified)_China.936"));std::locale locale2 = std::locale::classic();std::cout << "locale2.name():   " << locale2.name() << std::endl;return 0;
}

输出

locale1.name():   C
locale2.name():   C

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/745877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 的并发竞争问题是什么?如何解决这个问题?了解 Redis 事务的 CAS 方案吗?

目录 一、面试官心理分析 二、面试题剖析 一、面试官心理分析 这个也是线上非常常见的一个问题&#xff0c;就是多客户端同时并发写一个key&#xff0c;可能本来应该先到的数据后到了&#xff0c;导致数据版本错了;或者是多客户端同时获取一个 key&#xff0c;修改值之后再写回…

KKVIEW: 远程控制软件哪个好用

远程控制软件哪个好用 随着科技的发展和工作方式的改变&#xff0c;远程控制软件越来越受到人们的关注和需求。无论是在家中远程办公&#xff0c;还是技术支持人员为远程用户提供帮助&#xff0c;选择一款高效稳定的远程控制软件至关重要。在众多选择中&#xff0c;有几款远程…

51-30 World Model | 自动驾驶的世界模型:综述

24年3月&#xff0c;澳门大学和夏威夷大学联合发布的工作&#xff0c;World Models for Autonomous Driving: An Initial Survey。花时间反复看了几遍&#xff0c;刚开始觉得世界模型没用&#xff0c;空洞无序&#xff0c;根本不可能部署到实车上&#xff0c;后面逐渐相信&…

idea 导入项目

idea 导入项目并运行 导入设置设置 jdk查看maven 设置 导入 在项目首页 或者 file 选择 open, 然后选择项目根路径 设置 设置 jdk 查看maven 设置

[Python学习]变量存储逻辑和垃圾回收机制(GC)

一、引子 首先&#xff0c;我们从两个例子入手垃圾回收机制: a 1000 b 2000 a b a 100 b 200 a b 这两段代码的功能都是“把b变量的值赋值给a变量”&#xff0c;但是在Python的底层逻辑上&#xff0c;这两段代码的实现过程确是有所不同的。 过程&#xff1a;第一段代码…

基于java实用的音乐软件微信小程序的设计与实现【附项目源码】分享

基于实用的音乐软件微信小程序的设计与实现: 源码地址&#xff1a;https://download.csdn.net/download/weixin_43894652/88842586 一、引言 随着移动互联网的普及和微信小程序的兴起&#xff0c;音乐类小程序成为了用户随时随地享受音乐的重要工具。本需求文档旨在详细阐述一…

基于单片机的大棚温湿度控制系统设计

摘要:现阶段我国的科学技术方面得到了快速的发展,各项社会事业的发展也都进行了智能化技术的应用,农业事业智能化发展在现如今时代发展进程中变得越来越重要了,如果能够实现对大鹏的温度和湿度进行有效且稳定的控制,能够实现现代的农业大棚高水平的发展,这对于我国整体的…

Python 实现一个简单的中文分词处理?

在Python中,实现一个简单的中文分词处理,我们可以采用基于规则的方法,比如最大匹配法、最小匹配法、双向匹配法等。但更常见且效果更好的是使用现有的分词库,如jieba分词。   以下是使用jieba分词库进行中文分词的简单示例: 安装jieba 首先,你需要安装jieba库。如果你…

【图解物联网】第零章 前言

前言 一、本博文的写作背景 这个寒假&#xff08;准确的说应该是上个学期&#xff09;&#xff0c;作者通过厚脸皮以及社牛的性格&#xff0c;抱住了一位老师的大腿&#xff0c;并且通过寒假期间突击补习&#xff0c;成功得到老师的赏识&#xff0c;得以进组进一步学习各…

c++简单使用

取消同步流是为了解决C有时遇到空格或回车&#xff08;不到\0&#xff09;就会停下的问题 #include<bits/stdc.h> using namespace std; int main() {//取消同步流ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int a, b;cin >> a>> b;cout << …

拦截器和过滤器(原理区别)

目录 一、拦截器 拦截器是什么 拦截器的使用 拦截器的实现 导入依赖 实现HandlerInterceptor接口 注册拦截器 拦截器的生命周期 拦截器的执行顺序 拦截器的生命周期 多个拦截器的执行流程 拦截器的实际使用 拦截器实现日志记录 实现接口幂等性校验 拦截器的性能…

Python import 跟 Java import 有什么区别?

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

STL——map set

文章将解决一下几个问题&#xff1a; 1.什么是set 2.什么是map 3.set应用场景 4.map应用场景 序列式容器和关联式容器 数据结构有序列式容器和关联式容器&#xff0c;序列式容器一般有vector,list,deque…&#xff0c;但关联式容器中就有map&#xff0c;关联式容器也是用来存…

23.2 微服务基础实战

23.2 微服务基础实战 课程安排1. **************************************************************************************** 课程安排 1. ****************************************************************************************

react 对Fiber架构的理解?解决了什么问题?

一、问题 JavaScript 引擎和页面渲染引擎两个线程是互斥的&#xff0c;当其中一个线程执行时&#xff0c;另一个线程只能挂起等待 如果 JavaScript 线程长时间地占用了主线程&#xff0c;那么渲染层面的更新就不得不长时间地等待&#xff0c;界面长时间不更新&#xff0c;会导…

Gis导航控件

收费工具&#xff0c;白嫖党、学生党、闹眼子党勿扰 收费金额为100元 1 概述 最近研究了一下电子海图相关内容&#xff0c;发现海图解析和显示相关的功能&#xff0c;都没有好用的开源工具… 在Gis地图显示那一块&#xff0c;有一个导航控件小控件&#xff0c;好像还没有人专门…

从前端到前端框架

原文地址&#xff1a;从前端到前端框架 - Pleasure的博客 下面是正文内容&#xff1a; 前言 这是一篇笔记&#xff0c;主要用于帮助刚入门Web全栈不久的同学。以及个人思路的记录整理。 如果你是一个全栈大师就可以直接跳过了。当然想加深一下理解也没有问题。 可能会较多谈谈…

《父母的觉醒》父母不是在培养一个“迷你版”的自己

简介 作者为美国哥伦比亚大学心理学博士沙法丽萨巴瑞。作者也写了《家庭的觉醒》。 作者的核心观点&#xff1a; 我们必须认识到&#xff0c;我们不是在培养一个“迷你版”的自己&#xff0c;而是在塑造一个具有独立特征的灵魂。正因为如此&#xff0c;我们必须铆足精神&#…

IDEA把中国大陆高校教育邮箱都封了?

今天本想趁着快到期前&#xff0c;用教育邮箱续命&#xff0c;没想到&#xff1a; 天不遂人愿&#xff01;只能继续申请开源项目的许可证&#xff01; 可惜了&#xff0c;没提交在每个月&#xff1a;

Linux命令-date命令(显示或设置系统时间与日期)

概要 date [OPTION]... [FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]主要用途 转换时间到选定的格式&#xff0c;默认为当前。设置系统时间。 参数 format&#xff1a;输出的时间格式。 format可用的转义序列如下&#xff1a;%% 百分号 %a 当地缩写的工…