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 :

Suppression dans map


Sujet :

C++

  1. #1
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut Suppression dans map
    Salut,

    Voilà le problème.

    std::map< std::string, int > M ;

    Voilà M contient par exemple dix paires.

    On peut supprimer la première paire avec :
    M.erase( M.begin() ) ; // ok
    mais
    M.erase( M.begin() + 2 ) ; // ça coince.

    Franchement je ne comprends pas. Comment faire pour supprimer
    une paire dans une map ?

  2. #2
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut

    M.erase( "A" ); // valeur d'une clef
    M.erase( M.begin() ); // à une position (ici la première paire)
    M.erase( M.begin(), ++M.begin() ); // un "range"
    map<>::iterator est un itérateur bidirectional et non pas random access.
    Tu ne peux pas faire += ou + dessus.

    edit : j'ai oublié advance si tu veux vraiment faire le +2

  3. #3
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    On veut rarement accéder à un élément d'un conteneur trié par son index, plutôt par sa clé. Ceci-dit c'est toujours possible avec std::advance.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Salut,
    Laurent écrit :
    On veut rarement accéder à un élément d'un conteneur trié par son index, plutôt par sa clé. Ceci-dit c'est toujours possible avec std::advance.
    Mais comment ? Je cherche std::advance et je ne trouve rien .
    Un exemple svp pour avoir une idée des prototypes ...

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Bonjour,

    ça va, j'ai trouvé pour le std::advance, mais cela me paraît un peu grincheux par rapport à l'isomorphisme de la gestion des conteneurs.

    Un map n'est plus un conteneur ? Un set non plus ...Une liste ou un vecteur sans doute ...

    Qu'est un conteneur ?

    Un conteneur qui contient sans exception ...

    salut.

  6. #6
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par dj.motte
    ça va, j'ai trouvé pour le std::advance, mais cela me paraît un peu grincheux par rapport à l'isomorphisme de la gestion des conteneurs.
    Au contraire, c'est que qui permet d'avoir une interface commune, on ne devrait jamais faire de +, que des advance, à priori.
    Et puis l'isomorphisme des conteneurs, c'est une belle blague, ça ne sert à rien. En fait, tu ne sais pas exactement ce qu'est un conteneur

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Une map ne peut pas supporter l'accès aléatoire de manière performante, uniquement l'itération bidirectionnelle.
    Ceci est simplement du à la manière dont est implémentée map.

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Salut,

    Loufoque écrit :
    Une map ne peut pas supporter l'accès aléatoire de manière performante, uniquement l'itération bidirectionnelle.
    Ceci est simplement du à la manière dont est implémentée map.
    Ben oui, j'ai été surpris par map. Je ne m'étais jamais posé la question le la suppression d'une paire à l'intérieur d'une map.
    Jusqu'au jour oû advance est venu à la rescousse.

    Si advance avance existe-il une fonction pour reculer ? Ou faut-il faire un advance sur un rbegin(), ou rend() ?

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Il suffit d'avancer d'un nombre négatif...

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Salut,

    Merçi à toi Loufoque pour advance.
    Mais je reste sur ma faim.
    J'ai du mal à comprendre qu'un itérateur peut parcourir une map<K,V> avec des pointeurs, alors qu'il est impossible de faire jouer l'arithmétique des pointeurs pour un accès direct à une map.

    Franchement cela me dépasse.

  11. #11
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je ne pense pas que "arithmétique des pointeurs" et "arbres binaires" soient franchement compatibles.

  12. #12
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par dj.motte
    Salut,

    Merçi à toi Loufoque pour advance.
    Mais je reste sur ma faim.
    J'ai du mal à comprendre qu'un itérateur peut parcourir une map<K,V> avec des pointeurs, alors qu'il est impossible de faire jouer l'arithmétique des pointeurs pour un accès direct à une map.

    Franchement cela me dépasse.
    C'est un peu plus compliqué que des pointeurs, un itérateur !

Discussions similaires

  1. Problème de suppression dans une table
    Par Splinter dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/10/2005, 10h55
  2. [Debutant]Suppression dans des tables avec contraintes
    Par Roming22 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/10/2004, 17h23
  3. Combler les trous lors d'une suppression dans une table
    Par Billybongjoe dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 08/04/2004, 14h02
  4. [LG]suppression dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 9
    Dernier message: 16/12/2003, 21h20
  5. [LG]suppression dans un fichier
    Par cedrick essale dans le forum Langage
    Réponses: 5
    Dernier message: 10/08/2003, 15h22

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