首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::collate::do_compare

Defined in header <locale>

public: int compare( const CharT* low1, const CharT* high1, const CharT* low2, const CharT* high2 ) const;

(1)

protected: virtual int do_compare( const CharT* low1, const CharT* high1, const CharT* low2, const CharT* high2 ) const;

(2)

1%29公共成员函数,调用受保护的虚拟成员函数do_compare最派生的类。

2%29比较字符序列[low1, high1)到字符序列[low2, high2),使用此区域设置%27s排序规则,如果第一个字符串跟随第二个字符串,则返回1;如果第一个字符串位于第二个字符串之前,则返回-1;如果两个字符串相等,则返回零。

参数

low1

-

pointer to the first character of the first string

high1

-

one past the end pointer for the first string

low2

-

pointer to the first character of the second string

high2

-

one past the end pointer for the second string

返回值

1如果第一个字符串大于第二个%28,即按排序规则顺序%29跟随第二个字符串;-1如果第一个字符串小于第二个%28,则在排序规则顺序%29中,则为零。

注记

如果不需要%28进行三路比较,例如提供Compare标准算法的参数,例如std::sort%29,std::locale::operator()也许更合适。

排序顺序是字典顺序:字母在国家字母中的位置等价类%29比它的情况或变体有更高的优先级。在等价类中,小写字符在大写等价物和特定于地区的顺序之前进行排序,可以适用于具有对话式的字符。在某些地区,一组字符比较起来是单个的。校对单位例如,"ch"捷克文如下"h"先于"i",和"dzs"匈牙利文如下"dz"先于"g"...

二次

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <locale>
 
template<typename CharT>
void try_compare(const std::locale& l, const CharT* p1, const CharT* p2)
{
    auto& f = std::use_facet<std::collate<CharT>>(l);
 
    std::basic_string<CharT> s1(p1), s2(p2);
    if(f.compare(&s1[0], &s1[0] + s1.size(),
                 &s2[0], &s2[0] + s2.size() ) < 0)
         std::wcout << p1 << " before " << p2 << '\n';
    else
         std::wcout << p2 << " before " << p1 << '\n';
}
 
int main()
{
    std::locale::global(std::locale("en_US.utf8"));
    std::wcout.imbue(std::locale());
 
    std::wcout << "In the American locale: ";
    try_compare(std::locale(), "hrnec", "chrt");
    std::wcout << "In the Czech locale: ";
    try_compare(std::locale("cs_CZ.utf8"), "hrnec", "chrt");
 
    std::wcout << "In the American locale: ";
    try_compare(std::locale(), L"år", L"ängel");
    std::wcout << "In the Swedish locale: ";
    try_compare(std::locale("sv_SE.utf8"), L"år", L"ängel");
}

二次

产出:

二次

代码语言:javascript
复制
In the American locale: chrt before hrnec
In the Czech locale: hrnec before chrt
In the American locale: ängel before år
In the Swedish locale: år before ängel

二次

另见

strcoll

compares two strings in accordance to the current locale (function)

wcscoll

compares two wide strings in accordance to the current locale (function)

operator()

lexicographically compares two strings using this locale's collate facet (public member function of std::locale)

代码语言:txt
复制
 © cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

扫码关注腾讯云开发者

领取腾讯云代金券