Namespaces
Variants

std::collate<CharT>:: transform, do_transform

From cppreference.net
Défini dans l'en-tête <locale>
public :
string_type transform ( const CharT * low, const CharT * high ) const ;
(1)
protected :
virtual string_type do_transform ( const CharT * low, const CharT * high ) const ;
(2)
1) Fonction membre publique, appelle la fonction membre virtuelle protégée do_transform de la classe la plus dérivée.
2) Convertit la séquence de caractères [ low , high ) en une chaîne qui, comparée lexicographiquement (par exemple avec operator< pour les chaînes) avec le résultat de l'appel à transform() sur une autre chaîne, produit le même résultat que l'appel à do_compare() sur les deux mêmes chaînes.

Table des matières

Paramètres

low - pointeur vers le premier caractère de la séquence à transformer
high - pointeur vers la position après le dernier caractère de la séquence à transformer

Valeur de retour

La chaîne transformée de sorte que la comparaison lexicographique des chaînes transformées puisse être utilisée à la place du classement des originaux. Dans les paramètres régionaux "C", la chaîne retournée est la copie exacte de [ low , high ) . Dans d'autres paramètres régionaux, le contenu de la chaîne retournée est défini par l'implémentation, et la taille peut être considérablement plus longue.

Notes

En plus de son utilisation dans le classement, le format spécifique à l'implémentation de la chaîne transformée est connu de std::regex_traits<>::transform_primary , qui est capable d'extraire les informations de classe d'équivalence.

Exemple

#include <iomanip>
#include <iostream>
#include <locale>
int main()
{
    std::locale::global(std::locale("sv_SE.utf8"));
    auto& f = std::use_facet<std::collate<wchar_t>>(std::locale());
    std::wstring in1 = L"\u00e4ngel";
    std::wstring in2 = L"\u00e5r";
    std::wstring out1 = f.transform(&in1[0], &in1[0] + in1.size());
    std::wstring out2 = f.transform(&in2[0], &in2[0] + in2.size());
    std::wcout << "Dans la locale suédoise : ";
    if (out1 < out2)
        std::wcout << in1 << " avant " << in2 << '\n';
    else
        std::wcout << in2 << " avant " << in1 << '\n';
    std::wcout << "En comparaison lexicographique : ";
    if (in1 < in2)
        std::wcout << in1 << " avant " << in2 << '\n';
    else
        std::wcout << in2 << " avant " << in1 << '\n';
}

Sortie :

Dans la locale suédoise : år before ängel
En comparaison lexicographique : ängel before år

Voir aussi

transforme une chaîne de caractères de sorte que strcmp produise le même résultat que strcoll
(fonction)
transforme une chaîne de caractères larges de sorte que wcscmp produise le même résultat que wcscoll
(fonction)