std::collate<CharT>:: compare, std::collate<CharT>:: do_compare
|
Défini dans l'en-tête
<locale>
|
||
|
public
:
int
compare
(
const
CharT
*
low1,
const
CharT
*
high1,
|
(1) | |
|
protected
:
virtual
int
do_compare
(
const
CharT
*
low1,
const
CharT
*
high1,
|
(2) | |
do_compare
de la classe la plus dérivée.
[
low1
,
high1
)
à la séquence de caractères
[
low2
,
high2
)
, en utilisant les règles de collation de cette locale, et retourne
1
si la première chaîne suit la seconde,
-
1
si la première chaîne précède la seconde, zéro si les deux chaînes sont équivalentes.
Table des matières |
Paramètres
| low1 | - | pointeur vers le premier caractère de la première chaîne |
| high1 | - | pointeur après la fin pour la première chaîne |
| low2 | - | pointeur vers le premier caractère de la deuxième chaîne |
| high2 | - | pointeur après la fin pour la deuxième chaîne |
Valeur de retour
1 si la première chaîne est supérieure à la seconde (c'est-à-dire suit la seconde dans l'ordre de classement), - 1 si la première chaîne est inférieure à la seconde (précède la seconde dans l'ordre de classement), zéro si les deux chaînes sont équivalentes.
Notes
Lorsqu'une comparaison à trois voies n'est pas requise (comme lors de la fourniture d'un argument
Compare
aux algorithmes standards tels que
std::sort
),
std::locale::operator()
peut être plus approprié.
L'ordre de collation est l'ordre du dictionnaire : la position de la lettre dans l'alphabet national (sa classe d'équivalence ) a une priorité plus élevée que sa casse ou sa variante. Au sein d'une classe d'équivalence, les caractères minuscules se trient avant leurs équivalents majuscules et l'ordre spécifique aux paramètres régionaux peut s'appliquer aux caractères avec diacritiques. Dans certaines régions, des groupes de caractères sont comparés comme des unités de collation uniques. Par exemple, "ch" en tchèque suit "h" et précède "i" , et "dzs" en hongrois suit "dz" et précède "g" .
Exemple
#include <iostream> #include <locale> #include <string> 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"); }
Sortie :
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
Voir aussi
|
compare deux chaînes de caractères selon la locale actuelle
(fonction) |
|
|
compare deux chaînes de caractères larges selon la locale actuelle
(fonction) |
|
|
compare lexicographiquement deux chaînes en utilisant la facette de collation de cette locale
(fonction membre publique de
std::locale
)
|