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

SL & STL C++ Discussion :

ForwardIterator of map


Sujet :

SL & STL C++

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut ForwardIterator of map
    j ai besoin d un ForwardIterator de map car je veut appliquer un algorithm de stl a map et qui prend un ForwardIterator en arguments
    j ai essayé le map<int,string>::iterator mais il me renvoi des erreurs


    desolé pour derrangement car je sais que j ai abusé des questions mais j en ai besoin

  2. #2
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    A priori je pensque que les Forward Iterator fonctionne sur les Forward Container :
    • vector
    • list
    • slist
    • deque
    • set
    • hash_set
    • map
    • hash_map
    • multiset
    • hash_multiset
    • multimap
    • hash_multimap


    http://www.sgi.com/tech/stl/ForwardContainer.html

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut
    ca je le sait
    mais j ai besoin d un exemple d un forward iterator qui marche sur une map<int,string>
    par exemple pour le input iterator on peut simplement utiliser un map<int,string>::iterator
    pour output iterator on peut utiliset std::inserter ...

    je veut seulement quelques forward itrator qui marche pour une map<int,string>e

  4. #4
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Excuse moi j'ai pas bien lu la réponse que je t'ai donné ...

    Cependant ton map<int,string>::iterator doit être un Forward Iterator... on dirait.
    Quels sont le message d'erreur et ton utilisation?

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut
    dans certains algorithmes de la stl , on doit passer en parametre un forward iterator
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    template < class ForwardIterator, class T >
      ForwardIterator remove ( ForwardIterator first, ForwardIterator last,
                               const T& value );
    alors je n arrive pas a l appliquer a la map

    meme question pour les algorithms transform,replace,generate... c est a dire les algorithms qui modifient la sequence

  6. #6
    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
    Et on peut voir comment tu l'utilises ? (n'oublie pas que le dernier paramètre devra être un map<int, string>::value_type, en d'autres termes un pair<int, string>)

    PS pour faire mon chiant : c'est toujours aussi nul d'utiliser ces fonctions sur un std::map

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par Laurent Gomila
    Et on peut voir comment tu l'utilises ? (n'oublie pas que le dernier paramètre devra être un map<int, string>::value_type, en d'autres termes un pair<int, string>)
    Pire : Le value_type est un pair<int const, string>. C'est à dire qu'il n'est pas assignable, alors que l'algorithme std::remove en a besoin (même si ça n'apparaît pas dans la norme de 98, mais ça apparaît dans de draft courant).

    Donc, impossible d'appliquer std::remove sur des maps.

    Mais bon, je suis d'accord qu'un petit std::map::erase est bien mieux en l'occurrence.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut
    d accord
    est ce que c le meme probleme pour les algorithmes transform,replace,fill,generate,unique et les autre sequences qui modifient les valeurs dans mon map ?????????????????????????????????

  9. #9
    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
    A priori oui.

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut
    mais j ai des problemes meme dans les algorithms qui ne modifient pas la valeur de ma map

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    map<int,string> m;
    map<int,string>::iterator i=m.begin();
    map<int,string>::iterator j=m.end();
    map<int,string>::iterator it=lower_bound(i,j,p1);
    avec p1 un pair<int,string> qu il est bien initialisé auparavant

    aidez moi please car je suis coincé et merci

    il me donne l erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     C:\Dev-Cpp\include\c++\3.4.2\bits\stl_algo.h In function `_ForwardIterator std::lower_bound(_ForwardIterator, _ForwardIterator, const _Tp&) [with _ForwardIterator = std::_Rb_tree_iterator<std::pair<const int, std::string> >, _Tp = mypair]':

  11. #11
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut
    desole mais j ai bien compris ou est l erreur
    l opertor < n est pas definit pour les value_type d un map

    n existe t il pas une methode pour contourner ce probleme ??

  12. #12
    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 saurais pas dire ce qui est incompatible ici, mais quoiqu'il arrive ce n'est pas pour rien que std::map a une fonction membre lower_bound.

  13. #13
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par ocean24
    avec p1 un pair<int,string> qu il est bien initialisé auparavant
    Que se passe-t-il si tu fais de p1 un pair<int const, string> ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  14. #14
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut
    meme probleme meme si de plus je declare p comme etant const pair<int,string>=...

  15. #15
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je n'ai jamais dit const pair<int,string> mais pair<int const,string>

    Le code suivant marche chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <iostream>
    #include <map>
     
    using namespace std;
     
    int main()
    {
        map<int,string> m;
        m[1] = "un";
        m[2] = "deux";
        m[3] = "trois";
        pair<int const, string>p1(2, "deux");
        map<int,string>::iterator i=m.begin();
        map<int,string>::iterator j=m.end();
        map<int,string>::iterator it=lower_bound(i,j,p1);
        cout << it->second << endl;
    	return 0;
    }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  16. #16
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut
    merci ca marche bien aussi chez moi

  17. #17
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut
    j ai un autre probleme avec merge
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    OutputIterator merge ( InputIterator1 first1, InputIterator1 last1,
                             InputIterator2 first2, InputIterator2 last2,
                             OutputIterator result );
    j ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    merge (m.begin(),m.end(),n.begin(),n.end(),l.begin());
    mais ca marche pas

    j ai bien utiliser une methode qui utilise un output iterator pour afficher les elements du resultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    merge (m.begin(),m.end(),n.begin(),n.end(),std::ostream_iterator<MappingType>(cout,"\n"));
    avec mappingtype est une structure defini auparavant
    ca marche parfaitement
    mais je veut metre le resultat dans une autre map l
    est ce possible ???

  18. #18
    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
    Utilise un std::inserter(l, l.end()) (comme pour std::copy) au lieu de l.begin().

  19. #19
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut
    d accord ca marche parfaitement
    c etait devant mes yeux mais peut etre que c le sommeil qui m a piegé

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

Discussions similaires

  1. Bump mapping
    Par Francky033 dans le forum DirectX
    Réponses: 7
    Dernier message: 22/11/2003, 18h35
  2. [EJB2.1 Entity] [BES] Mapping automatique et clés étrangères
    Par Bobby McGee dans le forum Java EE
    Réponses: 3
    Dernier message: 15/10/2003, 10h33
  3. Réponses: 2
    Dernier message: 11/07/2003, 18h24
  4. Problème avec memory mapping
    Par gemai dans le forum C
    Réponses: 13
    Dernier message: 04/07/2003, 09h50
  5. Editeur de MAP en delphi pour jeux directX
    Par PetitScorpion dans le forum DirectX
    Réponses: 5
    Dernier message: 09/07/2002, 18h47

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