web-dev-qa-db-fra.com

Utilisation de l'opérateur de comparaison inférieur à pour les chaînes

Je suis en train de suivre un tutoriel pour C++ et je regarde les chaînes et la surcharge avec des opérateurs tels que + =, ==,! = Etc, ont actuellement une simple instruction if

if(s1 < s2)
    cout << s2 <<endl;
else
  if(s2 < s1)
    cout << s1 << endl;
  else
    cout << "Equal\n";

mais comment cela fonctionne-t-il et comment le programme décide-t-il quelle chaîne est supérieure à une autre? en regardant autour, j'ai trouvé une version de base du modèle:

template<class charT, class traits, class Allocator>
  bool operator< ( const basic_string<charT,traits,Allocator>& lhs,
                const basic_string<charT,traits,Allocator>& rhs );

cela définit-il comment <fonctionne? si oui, que signifie/fait?

les opérateurs suivants ont-ils également une signification pour les chaînes? - = et * =

tout conseil est grandement appréciée!

13
Dmist

L'opérateur inférieur à sur les chaînes effectue une comparaison lexicographique sur les chaînes. Cela compare les chaînes de la même manière qu'elles seraient répertoriées dans l'ordre du dictionnaire, généralisées pour fonctionner pour les chaînes avec des caractères non alphabétiques.

Par exemple:

"a" < "b"
"a" < "ab"
"A" < "a"             (Since A has ASCII value 65; a has a higher ASCII value)
"cat" < "caterpillar"

Pour plus d'informations, consultez le std::lexicographical_compare algorithme, que l'opérateur inférieur à invoque habituellement.

Pour ce qui est de -= et *=, aucun de ces opérateurs n'est défini sur les chaînes. Les seuls opérateurs "arithmétiques" définis sont + et +=, qui effectue la concaténation de chaînes.

J'espère que cela t'aides!

23
templatetypedef

Les opérateurs de comparaison implémentent ordre lexicographique de chaînes.

-= et *= ne sont pas définis pour les chaînes.

2
NPE