Page 1 sur 1

change la MapKey d'un element map ?

Publié : lun. 20/juin/2011 12:58
par Thyphoon
Est ce que quelqu'un a une meilleur idée pour changer la mapkey d'un element map ?
l'idéal serait de pouvoir changer le mapkey sans connaitre la structure de la map .. mais j'ai pas trouvé !

Code : Tout sélectionner

Structure test
  Data.s
  size.q
EndStructure

NewMap test.test()

Procedure changeMapKey(Map mymap.test(),oldName.s,newName.s)
  mymap(newName)\data=mymap(oldName)\data
  mymap(newName)\size=mymap(oldName)\size
  DeleteMapElement(mymap(),oldName) 
EndProcedure

test("coucou")\data="des données"
test("coucou")\size=16384


changeMapKey(test(),"coucou","toto")
Debug test("toto")\data

Re: change la MapKey d'un element map ?

Publié : lun. 20/juin/2011 14:25
par G-Rom
Je comprends pas le problème , pourquoi voudrais tu changé de clé sur la map ?
Comprends tu vraiment comment fonctionne en interne une map ? Une clé est unique.

Re: change la MapKey d'un element map ?

Publié : lun. 20/juin/2011 14:45
par Thyphoon
G-Rom a écrit :Je comprends pas le problème , pourquoi voudrais tu changé de clé sur la map ?
déjà merci d'avoir prit le temps de m'avoir lu :P
Et bien tout simplement car la clé a changé !
Actuellement je réfléchis a un jeu style bande dessinée interactive. Dans mon éditeur j'utilise les maps avec le nom de la vignette comme clef... mais on peu la renommer,d'ou ma question.
Effectivement je pourrais faire ça avec des tableaux, ou de simple liste...mais c'était une question de simplicité ! j'ai pas besoin de vitesse, vu qu'on ne change pas de vignette toute les secondes ...
G-Rom a écrit : Comprends tu vraiment comment fonctionne en interne une map ? Une clé est unique.
Je pense oui .... l'index est basé sur une chaine et non sur un entier ? non ?

Maintenant si tu me dis que ma façon de faire est pas la bonne je peux changer je suis pas buté :mrgreen: :wink:

Re: change la MapKey d'un element map ?

Publié : lun. 20/juin/2011 15:55
par G-Rom
J'ai pas dit que ta méthode n'est pas bonne, j'ai juste pas compris le concept , toujours pas d'ailleurs :D
Je pense oui .... l'index est basé sur une chaine et non sur un entier ? non ?
En fait la chaine , donc la clé est transformé en entier (hashage) , cet entier représente l'indice dans un simple tableau.
c'est l'équivalent de std::map() en c++ , avant que fred l'ajoute en natif , j'en avais codé une en PB.

Le but d'une map, au dela de l'économie de ram , c'est la rapidité , pas besoin de parcourir une liste pour cherché un élément.
la clé donne l'index tout simplement.

A mon humble avis , avoir une clé dynamique tue l'intérêt même de la map. tu devrais basé la clé sur le pointeur de l'objet.
Structure test
Data.s
size.q
EndStructure

NewMap test.test()

MonObjet = ...

test( str(@MonObjet) )\Data = "blabla..."

Les ID de PureBasic se géré à peu près de cette manière.

Re: change la MapKey d'un element map ?

Publié : lun. 20/juin/2011 16:18
par Thyphoon
merci beaucoup! je vais creuser l'idée !! :o)