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 :

Problème de récupération dans une map


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Problème de récupération dans une map
    Voila j'essaye de récupérer l'itérateur correspondant à l'élément comme ceci :

    map<K,T>::iterator i=m.find(key);

    m étant une map<K,T> et key un K

    Le compilateur me donne: "expected ";" before i"

    J'ai remarqué qu'avec une map<int,int> cela ne le faisait pas, on peut pas récupérer le type des iterateurs des map avec des template ?

  2. #2
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Tu peux directement obtenir l'objet T associé à Key :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    T NewT;
    NewT = m[Key];

  3. #3
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Hum attends, tu parles de template....
    T c'est une class que tu as définie ou alors un template ????
    Sinon tu dois peut-être rajouter : template<typename T>, pour dire que tu utilises T, un paramêtre template....

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Ok, c'est effectivement un template T,

    par contre en faisant ce que tu me dis :
    T NewT;
    NewT = m[Key];

    J'avais cru comprendre dans la doc que faire appel à m[Key] créait un élément de valeur =0 et de clé Key (auto-vivification) mais je me trompe peut-être (surement) :p si la map ne contient pas d'élément de clé Key au moment de l'appel

    Pour clarifier le problème : mon but est de voir si l'élément est dans la map et s'il n'y est pas il faut que je l'ajoute mais je ne veux pas qu'il y ait auto-vivification (j'aimerai juste savoir s'il y a vraiment :p)


    Voila ce que dit la doc à propos de l'opérateur []:
    Returns a reference to the object that is associated with a particular key. If the map does not already contain such an object, operator[] inserts the default object data_type().

    Ce qui je crois confirme mes craintes :p

  5. #5
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par sacdenoeud
    J'avais cru comprendre dans la doc que faire appel à m[Key] créait un élément de valeur =0 et de clé Key (auto-vivification) mais je me trompe peut-être (surement) :p si la map ne contient pas d'élément de clé Key au moment de l'appel
    Non tu ne te trompe pas du tout...

    Citation Envoyé par sacdenoeud
    Pour clarifier le problème : mon but est de voir si l'élément est dans la map et s'il n'y est pas il faut que je l'ajoute mais je ne veux pas qu'il y ait auto-vivification (j'aimerai juste savoir s'il y a vraiment :p)
    Ben alors dans ce cas tu peux utiliser ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    T AIntroduire;
    m[Key] = AIntroduire;
    Ca va associer AIntroduire à Key dans le map... s'il n'existe pas il va le créer...
    s'il existe, il doit l'écraser (mais je ne suis pas sur qu'il l'écrase)

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Vi lol mais j'ai dû mal m'expliquer car ce n'est pas exactement ce que je souhaite !!
    Je recommence en plus clair :p !!

    Je dois regarder s'il y a un élément pour la clé key dans la map :
    Si oui : je ne veux pas qu'il soit remplacé, je laisse l'ancien !!
    Si non : il faut que j'en insère un nouveau que je vais obtenir avec une autre méthode

    D'où le besoin de faire une recherche qui n'écrase pas .... et qui n'ajoute pas un élément par defaut.

  7. #7
    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
    Effectivement, pour ce que tu veux faire, il faut utiliser find puis modifier ou non l'itérateur récupéré suivant le résultat de la recherche.

    Ton problème semble venir des types T et K, à quoi correspondent-ils ?

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Voila j'ai trouvé la solution, en fait T et K son des template, il suffisait de mettre "typename" au début de la ligne ce qui donne :

    typename map<K,T>::iterator i=m.find(key);

    Voilou

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/03/2008, 00h18
  2. problème avec insert dans une map
    Par LePetitBricoleur dans le forum C++
    Réponses: 3
    Dernier message: 01/11/2007, 11h52
  3. [SimpleXML] Google Maps, Problème d'encoding dans une boucle
    Par yahn dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/09/2006, 19h40
  4. [Delta3d] probléme avec un objet dans une map
    Par astragoth dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 27/03/2006, 14h49
  5. problème de références _ptr dans une map STL
    Par Mr_Tyu dans le forum CORBA
    Réponses: 1
    Dernier message: 10/08/2004, 10h39

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