在线文档教程
C++
本土化 | Localizations

std::collate::do_compare

STD::COLATE::COLATE,STD::COLATE::DO[医]比较

Defined in header
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"...

二次

#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" }

二次

产出:

二次

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

二次

另见

strcollcompares two strings in accordance to the current locale (function)
wcscollcompares 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)

© cppreference.com

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

http://en.cppreference.com/w/cpp/locale/corate/比较法