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 :

S'assurer de la présence d'un element dans un map ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut S'assurer de la présence d'un element dans un map ?
    Bonsoir

    J'ai une map, dont les éléments, qui sont des int, sont identifiés par des std::string :

    std::map <std::string, int> _materials; // Index de matériaux

    Je peux ajouter des éléments facilement :

    _materials.insert (std::make_pair ("matID1", matID1));

    Mais ce que je souhaiterai pouvoir faire, c'est savoir, via la clé (le std::string), si l'élément existe. Par exemple, disons que j'ai ajouté le int matID1 et que son identifiant dans la map est "matID1", et que j'ai une fonction qui prend en paramètre un string, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void MaFonction (const std::string laString)
    {
         std::cout << _materials [laString];
    }
    Je voudrais pouvoir, avant de l'afficher, m'assurer que l'élément existe bien, toutefois je n'ai pas trouvé la fonction qui permette de faire ça, genre quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (_materials [laString].exist())
    {
       std::cout << _materials [laString];
    }
    merci

  2. #2
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::map < std::string, int >::const_iterator it = map.find(key);
    if ( it == map.end() )
    {
     // pas trouvé.... :cry: 
    }
    après si c'est une multimap, c'est dans le même esprit, sauf que tu récupère une paire d'itérateurs...

    Après, si tu veux utiliser les [] pour récupérer la valeur associée, il faut que tu regardes comment ton implémentation gère le cas ou tu n'as pas de donnée associée (exception...)

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    Citation Envoyé par Rupella
    Après, si tu veux utiliser les [] pour récupérer la valeur associée, il faut que tu regardes comment ton implémentation gère le cas ou tu n'as pas de donnée associée (exception...)
    S'il n'y a pas de donnée associée à une clé lors de l'appel de operator[], celui-ci insère une donnée (construite avec son constructeur par défaut) à la clé indiquée, et retourne cette donnée par défaut.

  4. #4
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Citation Envoyé par Rupella
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::map < std::string, int >::const_iterator it = map.find(key);
    if ( it == map.end() )
    {
     // pas trouvé.... :cry: 
    }
    après si c'est une multimap, c'est dans le même esprit, sauf que tu récupère une paire d'itérateurs...

    Après, si tu veux utiliser les [] pour récupérer la valeur associée, il faut que tu regardes comment ton implémentation gère le cas ou tu n'as pas de donnée associée (exception...)
    Merci, c'est exactement ce qu'il me fallait.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/06/2009, 09h48
  2. s'assurer de la présence d'un fichier
    Par alainpinpin dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/01/2009, 15h02
  3. Réponses: 2
    Dernier message: 05/11/2007, 14h38
  4. Inserer des elements dans une map sans rangement ?
    Par Muetdhiver dans le forum C++
    Réponses: 3
    Dernier message: 07/09/2004, 11h09
  5. Réponses: 12
    Dernier message: 26/02/2003, 08h14

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