Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2593 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Interversion elements dans une map

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Interversion elements dans une map

n°1014140
SBAM
Best recording of rach 3.
Posté le 16-03-2005 à 08:18:57  profilanswer
 

Bonjour
 
Je vous explique en premier lieu la structure de mon bourdel:
 
- j'ai une classe (A) non instantiable avec en descendance plusieurs classes. (B, C etc...)  
- une map<clef, A*>
 
Je veux deplacer une classe contenue dans la map (degager la classe a la position clef1 et la remettre a la position clef2).
Je n'ai pas trouver de fonction qui font ca : http://www.sgi.com/tech/stl/Map.html
 
J'ai pense faire une copie de la classe pointee, erase l'ancienne et insert la copie avec sa nouvelle clef.
Toutefois, comme precise au debut du post, A n'est pas instantiable.  
 
Je cherche donc un moyen qui m'eviterait de faire des new en me servant d'un dynamic cast.(fortement porcain a mon sens)  :o

mood
Publicité
Posté le 16-03-2005 à 08:18:57  profilanswer
 

n°1014182
Taz
bisounours-codeur
Posté le 16-03-2005 à 09:26:29  profilanswer
 

classe ? instances ? non instanciable ? virtuelle pure ? abstraite ? tu veux bien refaire la même chose mais avec du vocabulaire C++

n°1014189
schnapsman​n
Zaford Beeblefect
Posté le 16-03-2005 à 09:35:20  profilanswer
 

Taz a écrit :

classe ? instances ? non instanciable ? virtuelle pure ? abstraite ? tu veux bien refaire la même chose mais avec du vocabulaire C++


ta gueule, retourne dans ton trou toi  :o  
 

Code :
  1. std::map<K, A*> myMap;
  2. ...
  3. std::map<K, A*>::iterator i1, i2;
  4. ...
  5. std::swap(i1->second, i2->second);


 

n°1014191
SBAM
Best recording of rach 3.
Posté le 16-03-2005 à 09:36:55  profilanswer
 

Taz a écrit :

classe ? instances ? non instanciable ? virtuelle pure ? abstraite ? tu veux bien refaire la même chose mais avec du vocabulaire C++


 
Ca me parait pourtant clair qu'une classe non instantible est virtuelle pure / abstraite etc... [:izz] Si tu as besoin de ce vocabulaire pour comprendre ce que je dis, tu peux laisser les autres repondre.  [:guish]

n°1014193
Taz
bisounours-codeur
Posté le 16-03-2005 à 09:41:05  profilanswer
 

OK.

n°1014197
SBAM
Best recording of rach 3.
Posté le 16-03-2005 à 09:46:02  profilanswer
 

schnapsmann a écrit :

ta gueule, retourne dans ton trou toi  :o  
 

Code :
  1. std::map<K, A*> myMap;
  2. ...
  3. std::map<K, A*>::iterator i1, i2;
  4. ...
  5. std::swap(i1->second, i2->second);



 
Merci pour ta reponse, mais il ne s'agit pas de swapper deux element mais d'en deplacer un. Si je passe un iterator faisand a swap, ca va peter  [:ktulu]

n°1014203
HelloWorld
Salut tout le monde!
Posté le 16-03-2005 à 09:57:16  profilanswer
 

Citation :

J'ai pense faire une copie de la classe pointee, erase l'ancienne et insert la copie avec sa nouvelle clef.


Ben je pense aussi que c'est ce qu'il faut faire, sauf pour la copie. Si tu associes bien un pointeur vers A à une clé, ben tu réutilises le même pointeur (pourquoi cloner la classe ?)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1014205
schnapsman​n
Zaford Beeblefect
Posté le 16-03-2005 à 10:00:47  profilanswer
 

SBAM a écrit :

Merci pour ta reponse, mais il ne s'agit pas de swapper deux element mais d'en deplacer un. Si je passe un iterator faisand a swap, ca va peter  [:ktulu]


ya pas moyen.
erase + insert et c'est sur, il n'y a rien de mieux à faire avec une map pour faire ça

n°1014215
schnapsman​n
Zaford Beeblefect
Posté le 16-03-2005 à 10:09:09  profilanswer
 

SBAM a écrit :

Et donc faire du dynamic cast sur toutes les classes filles [:ktulu]  
 [:kzimir]


arrete la moquette là.
 
tu as des pointeurs dans ta map, pas besoin de recréer les instances [:mlc]
 
de + tu ne down cast pas, donc pas besoin de dynamic_cast [:itm]

n°1014234
SBAM
Best recording of rach 3.
Posté le 16-03-2005 à 10:18:30  profilanswer
 

schnapsmann a écrit :

arrete la moquette là.
 
tu as des pointeurs dans ta map, pas besoin de recréer les instances [:mlc]
 
de + tu ne down cast pas, donc pas besoin de dynamic_cast [:itm]


 
size_type erase(const key_type& k)
Associative Container
Erases the element whose key is k.

Ca delete la classe ca [:huit]
 
 
Si je ne connais pas le type de ma classe, comment pourrais-je l'instancier  [:izz]  (dans l'optique d'une copie)


Message édité par SBAM le 16-03-2005 à 10:22:53
mood
Publicité
Posté le 16-03-2005 à 10:18:30  profilanswer
 

n°1014283
schnapsman​n
Zaford Beeblefect
Posté le 16-03-2005 à 10:52:25  profilanswer
 

SBAM a écrit :


Ca delete la classe ca [:huit]
 
 
Si je ne connais pas le type de ma classe, comment pourrais-je l'instancier  [:izz]  (dans l'optique d'une copie)


Heu mais ça efface le "element type" dans la map (à savoir une pair<Key, A*> dans ton cas).
En aucun cas ton A* est passé par delete.
 
De plus pourquoi recréer tes instances???
 

n°1014324
SBAM
Best recording of rach 3.
Posté le 16-03-2005 à 11:22:40  profilanswer
 

schnapsmann a écrit :


En aucun cas ton A* est passé par delete.


 
Merci  :jap: Je croyais qu'il lancait delete sur l'element.
 
Je me torturais donc l'esprit pour rien  :o


Message édité par SBAM le 16-03-2005 à 11:25:00

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Interversion elements dans une map

 

Sujets relatifs
Taille des elements d'un BorderLayout[DOM/JavaScript] Traiter les tableaux d'éléments de form?
Ajouter des éléments de formulaire sans PHP[Résolu][Perl/Gtk2] Récupérer les éléments d'un Gtk2::TreeView
document.getElementById("form2").elements[champ] has no properties[php]recuperation des elements d'une liste multiple
comment positionner des elements dans un JPanel?positionner des elements dans un JPanel
Prendre un élèments d'édit et le mettre dans un mémoRécupérer éléments génerer dynamiquement
Plus de sujets relatifs à : Interversion elements dans une map


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)