IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Egalité de conteneurs (vector, map, etc.)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 43
    Par défaut Egalité de conteneurs (vector, map, etc.)
    Bonjour,

    Y a-t-il un moyen simple de voir si deux vector ou map sont égaux ?
    J'entends par la une fonction qui vérifie ça tout seul, ou même l'opérateur "==".

    Merci.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Par défaut
    Salut,
    pour les vector, il y a std::equal, http://cpp.developpez.com/faq/cpp/?page=STL#STL_vector
    et pour map, je ne sais pas ce que c'est.

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Tu aurais pu rechercher un peu et voir que dans les deux cas, il y a un opérateur == de défini
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Membre averti
    Inscrit en
    Août 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 43
    Par défaut
    Merci pour la réponse.

    Ca a l'air de fonctionner pour les types simple, mais est-ce que ça marche pour les types complexe (les objets que je crée moi même) ?
    Je crains que ça ne fasse qu'une comparaison en "surface" et non en profondeur (en vérifiant si tous les attributs des objets sont égaux).

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Bah faut bien que T soit equalityComparable... évidemment.

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Généralement, les différents algorithmes associés aux conteneurs se contentent d'évaluer la comparaison des éléments contenus.

    Ainsi, la comparaison d'égalité entre deux conteneurs renverra vrai si (et seulement si)... chaque élément du premier est égal à l'élément correspondant du second.

    Pour cela, il faut donc, comme l'a fait remarquer Goten que... le type d'objet maintenu dans la collection dispose... de l'opérateur ==.

    Dans certaines situations (exemple: pour les std::map et les std::set), ce n'est d'ailleurs pas forcément l'égalité qui est testée, mais plutôt l'équivalence ( si a<b donne un résultat faux et que b<a donne un résultat faux, les deux objets sont équivalents, mais pas forcément identiques )

    Cependant, la manière dont cette comparaison s'effectue au niveau de l'objet ne dépend que de toi, et il est donc de ton ressort de faire en sorte que la comparaison s'effectue "suffisamment en profondeur" par rapport à tes besoins (du moins pour les types non primitifs )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. vector<map<string, string> >::iterator ?
    Par scheme dans le forum C++
    Réponses: 11
    Dernier message: 10/12/2010, 09h32
  2. Conteneur vector de STL
    Par jeanjack dans le forum SL & STL
    Réponses: 6
    Dernier message: 10/04/2009, 14h26
  3. Le conteneur vector avec les objets
    Par HK1989 dans le forum C++
    Réponses: 4
    Dernier message: 08/02/2009, 16h22
  4. Réponses: 2
    Dernier message: 24/04/2006, 16h21
  5. Réponses: 2
    Dernier message: 11/07/2003, 18h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo