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 :

comment savoir si une clé existe deja dans une map??


Sujet :

C++

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Points : 189
    Points
    189
    Par défaut comment savoir si une clé existe deja dans une map??
    bonjour, j'auais voulu savoir si ceci est juste pour savoir si une clé est deja dans une map ou pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(map[5])objet deja dans map
    else objet pas dans map.
    en fait, mon but est de faire une map qui contien chaque fois une seule et uneique clé ,et si on essaye de rajouter une clé qui existe deja, on declenche une erreur.

    donc la question est quelle est le comportement de la map quand on fait map[X] sur un x qui n'existe pas??


    merci

    a+++

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    donc la question est quelle est le comportement de la map quand on fait map[X] sur un x qui n'existe pas??
    Ca en crée un par défaut.

    Pour tester l'existence d'une clé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (my_map.find(my_key) != my_map.end())
    {
        // Trouvé
    }
    Mais quel est l'intérêt d'une map à un seul élément ?

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Une map ne peut avoir qu'un seul élément dont la clé vaut x. Si on fait un autre machin[x], on accède à cet élément.
    La première fois qu'on fait ça, on crée une clé x avec un second membre construit avec le constructeur par défaut.

    Si tu veux tester l'insertion dans une map, teste donc avex la fonction qui va bien, insert : http://www.sgi.com/tech/stl/Map.html
    Elle retourne une paire dont le second membre indique si la clé existait déjà ou pas.

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Points : 189
    Points
    189
    Par défaut
    merci

    PS, pour l'internet, c'est simplement, que chaque element dans la map a un element unique construit au debut du programme en venant d'un fichier style

    1=blabla
    2=blibli
    ...
    si il a y
    1=
    2=
    erreur.

    PPS comment on fait pour marquer resolu ici??

    a++

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    PS
    Ok, donc ta map ne contient pas qu'une seule clé, c'est juste qu'on ne peut pas la modifier après l'init si j'ai bien compris.

    PPS
    En haut à droite, menu "Outils de la discussion".

  6. #6
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Points : 189
    Points
    189
    Par défaut
    heu en fait, y a que j'ai fiat une erreur

    c'est si c'est
    2=
    2=
    qu'il declenche une erreur. ou que'il y a deux image les memes (par le, je veux dire que leur path est identique)
    mais en gros c'est cela.

    j'ai utiliser map.fid() et je m'en porte tres bien.

    merci

  7. #7
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Tu ne peux pas avoir 2 clés identiques (doublons) dans une map. Ce serait seulement possible avec une std::multimap

    Si tu fait tamap[2] = "blablab", si la clé 2 existe déjà ca écrasera la valeur présente, sinon ca la créera.

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Points : 189
    Points
    189
    Par défaut
    mais moi ce que je voulais, c'et pas qu'il ecrase , c'est qu'il renvoi une exception ou un msg du style " DUC** T'AS DEJA MIS CETTE CLE" mais vu qu'il l'ecrase, pas grave, avec find, je suis tres content.


    a+++

  9. #9
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Si tu veux une exception ou un message tu fais comme Laurent a dit

    if (my_map.find(my_key) != my_map.end())
    {
    // Trouvé, donc envoyer un message ou exception
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Objet existant reconnu dans une fonction mais pas dans une autre
    Par Jiyuu dans le forum Général Python
    Réponses: 0
    Dernier message: 20/09/2011, 18h19
  2. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  3. Réponses: 3
    Dernier message: 31/07/2006, 16h42
  4. Réponses: 5
    Dernier message: 16/06/2006, 11h19
  5. Réponses: 3
    Dernier message: 22/04/2006, 06h05

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