Bonjour,
J'ai actuellement un petit problème que je n'arrive pas à résoudre. Je dispose d'un arbre avec, à chaque niveau de l'arbre, des données associées à ce noeud dans une map (bien que j'aimerais utiliser unordered_map pour plus d'efficacité puisque j'en ait rien à faire que ça soit classé, mais boost ne le propose pas :/).
Parfois, les objets associés à cette map doivent être changé de place. J'ai donc une fonction Update qui prend comme paramètre un identifiant pour pouvoir retrouver rapidement l'élément associé. Voici une version "light" de ma fonction
void Update (const size_t elementID)
{
// ptrT est un type template
ptrT element = myMap[elementID];
if (EstToujoursDansCeNoeud (element))
// Je ne fais rien
else (noeudParent->AddElement (element))
// J'ajoute l'élément dans le noeud parent
}
Le problème est que je souhaiterai supprimé cet élément de la map de CE NOEUD, mais je ne sais pas comment faire. J'ai pensé à affecter une valeur de 0.0 ou NULL ou l'élément (myMap[elementID] = NULL) mais je ne pense pas que ça soit si facile, ou églament un erase, mais le problème c'est que visiblement il appelle le destructeur de l'objet : This effectively reduces the container size by the number of elements removed, calling each element's destructor.
Or je ne souhaite pas que le destructeur de l'objet soit appelé, car si c'est le cas, ça invaliderait mon pointeur et donc l'élément qui serait ajouté dans le noeud parent ne serait plus bon :/.
Merci
EDIT : résolu. On dirait qu'en fait erase n'appelle pas le destructeur, la doc semble se tromper alors :p.
Partager