Namespaces
Variants

std::collate<CharT>:: compare, std::collate<CharT>:: do_compare

From cppreference.net
Défini dans l'en-tête <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) Fonction membre publique, appelle la fonction membre virtuelle protégée do_compare de la classe la plus dérivée.
2) Compare la séquence de caractères [ 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 )