422 votes

Différences entre C ++ string == et compare ()?

Je viens de lire quelques recommandations sur l'utilisation de

std::string s = get_string();
std::string t = another_string();

if( !s.compare(t) ) 
{

au lieu de

if( s == t )
{

Je suis presque toujours à l'aide de la dernière parce que je suis habitué à elle et il se sent naturel, plus lisible. Je ne savais même pas qu'il y en est une autre fonction de comparaison. Pour être plus précis, j'ai pensé == appellerais compare().

Quelles sont les différences? Dans quels contextes devraient d'une manière privilégiée à l'autre?

Je suis en considérant uniquement les cas où j'ai besoin de savoir si une chaîne est la même valeur qu'une autre chaîne.

518voto

Bo Persson Points 42821

C’est ce que dit la norme à propos de operator==

21.4.8.2 opérateur ==

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

Renvoie: lhs.compare (rhs) == 0.

On dirait qu'il n'y a pas beaucoup de différence!

167voto

Frédéric Hamidi Points 123646

std::string::compare() retourne un int:

  • égal à zéro si s et t sont égaux,
  • moins que zéro si s est inférieure à t,
  • supérieur à zéro si s est plus grand que t.

Si vous voulez que votre premier extrait de code pour avoir l'équivalent pour le second, il faut effectivement lire:

if (!s.compare(t)) {
    // 's' and 't' are equal.
}

L'opérateur d'égalité, seuls les tests pour l'égalité (d'où son nom) et renvoie un bool.

Pour des précisions sur les cas d'utilisation, compare() peut être utile si vous êtes intéressé à la façon dont les deux chaînes de caractères se rapportent à un autre (moins ou plus) quand ils arrivent à être différent. PlasmaHH à juste titre mentionne les arbres, et il pourrait aussi être, par exemple, une chaîne d'insertion algorithme qui vise à conserver le récipient triée, un algorithme de recherche dichotomique pour ledit récipient, et ainsi de suite.

EDIT: Comme Steve Jessop points dans les commentaires, compare() est le plus utile pour trier rapide et binaire des algorithmes de recherche. Naturel sortes et dichotomique, les recherches peuvent être mis en œuvre avec seulement std::less.

32voto

Cat Plus Plus Points 53385

compare a des surcharges pour comparer des sous-chaînes. Si vous comparez des chaînes entières, vous devez simplement utiliser l'opérateur == (et savoir s'il appelle compare ou non est à peu près sans importance).

6voto

Luchian Grigore Points 136646

compare() renverra false (bien, 0 ) si les chaînes sont égales.

Alors, ne prenez pas l’échange à la légère.

Utilisez ce qui rend le code plus lisible.

6voto

ckruse Points 5803

compare() est équivalent à strcmp (). == est une vérification d'égalité simple. compare() retourne donc un int , == est un booléen.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X