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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Tableau dynamique BOOST

n°1875949
Taz
bisounours-codeur
Posté le 21-04-2009 à 17:39:46  profilanswer
 

Reprise du message précédent :
Bah si Molle est un typdef de Machin*, aucun problème ?

mood
Publicité
Posté le 21-04-2009 à 17:39:46  profilanswer
 

n°1875966
spinzero
Posté le 21-04-2009 à 18:10:39  profilanswer
 

Taz a écrit :

Bah si Molle est un typdef de Machin*, aucun problème ?


 
typdef de Machin*  ??
En suivant l'exemple plus haut ça commence comme ça:  
 

Code :
  1. #include <boost/unordered_map.hpp>
  2. //#include <tools/freelist.hpp>
  3. struct Position
  4. {
  5. friend size_t hash_value(Position const & p)
  6. {
  7.   size_t seed = 0;
  8.      boost::hash_combine(seed, p.x);
  9.      boost::hash_combine(seed, p.y);
  10.   return seed;
  11. }
  12. size_t x;
  13. size_t y;
  14. Position(size_t x, size_t y) : x(x), y(y)
  15. {}
  16. };
  17. bool operator == (Position const & l, Position const & r)
  18. {
  19. return l.x == r.x && l.y == r.y;
  20. }
  21. int id_one;
  22. struct Molle
  23. {
  24.   int some_data;
  25.   Molle() : some_data(id_one)
  26.   {}
  27. };
  28. ...
  29. const size_t y_max = 3;
  30. boost::unordered_map< Position, Molle > sparse2D;
  31. typedef boost::unordered_map< Position, Molle >::iterator It;
  32. ...
  33. void mapMOLLE( int idA=NULL,  int idB=NULL )
  34. {
  35. int dim = 2;
  36. size_t limit[y_max] = {dim};
  37. bool pMAPPED = false;
  38. size_t x = 0;
  39. size_t y = 0;
  40. bool found_A = false;
  41. size_t xA = 0;
  42. size_t yA = 0;
  43. bool found_B = false;
  44. size_t xB = 0;
  45. size_t yB = 0;
  46.  while (y < y_max){
  47.     It it = sparse2D.find(Position(x, y));
  48.     if (it == sparse2D.end()) {
  49.       ++y;
  50.       x = 0;
  51.        std::cout << std::endl;
  52.     } else {
  53.      if( idA ) {
  54.      if( it->second.some_data == idA){
  55.       xA = x; yA = y;
  56.       found_A = true;
  57.      }
  58.      }
  59.    //-------------------
  60.     if( idB ){
  61.      if( it->second.some_data == idB ){
  62.      xB = x; yB = y;
  63.      found_B = true;
  64.     }
  65.     }
  66.   //-------------------
  67.     ++x;
  68.   }
  69. }
  70.  if( !found_A && !found_B){
  71.   if( idA && idB ){
  72.     id_one = idA;
  73.     sparse2D[Position(0, mol_i)] = Molle();
  74.   id_one = idB;
  75.    sparse2D[Position(1, mol_i)] = Molle();
  76.   mol_i ++;
  77.    }
  78. }
  79. else
  80. {
  81.  if( found_A == true ){
  82.  if( idB ){
  83.  dim = xA +1;
  84.  size_t limit[y_max] = {dim};
  85.  if( found_B == true ){
  86.  cleanMollePOS( xB, yB);
  87.  }else{
  88.   id_one = idB;
  89.  sparse2D[Position( xA+1, yA)] = Molle();
  90.   }
  91.  }
  92. }
  93.   if( found_B == true ){
  94.   if( idA ){
  95.   dim = xA +1;
  96.   size_t limit[y_max] = {dim};
  97.   if( found_A == true ){
  98.   cleanMollePOS( xA, yA);
  99.   }else{
  100.   id_one = idA;
  101.   sparse2D[Position(xB+1, yB)] = Molle();
  102.   }
  103.  }
  104. }
  105.    }


 
Ma fonction de supression n'est pas bonne car elle me renvoie:
error C2440 'delete' :cannot convert from 'Molle' to 'void *'
 
Et puis, si je veux supprimer 1 seul élément d'une ligne il faudrait plutôt qlq chose comme:
 

Code :
  1. void cleanMollePOS( size_t x, size_t y ){
  2. It it = sparse2D.find(Position(x, y));
  3. if (it == sparse2D.end())
  4. {
  5. // Supprimer tt la ligne, donc 1 colonne ?
  6. }
  7. else
  8. {
  9.     delete(it)->second;
  10.     // dois-je modifier aussi le range comme lorsque  j'ajoute avec mapMOLLE()?
  11. }
  12. }


 
Et si avez des remarques l'écriture mapMOLLE()...
merci  :whistle:


Message édité par spinzero le 21-04-2009 à 18:28:32
n°1875977
Taz
bisounours-codeur
Posté le 21-04-2009 à 18:49:11  profilanswer
 

bah pas delete, erase.

n°1876218
spinzero
Posté le 22-04-2009 à 11:53:06  profilanswer
 

Taz a écrit :

bah pas delete, erase.


Mais oui !
 
Enfin comment tu l'écris car :
 

Code :
  1. erase (it)->second;


Le compilateur me dit qu'il faut pointer vers une Struct/Union/generic type...
 
Et, même si ça ne semble stupide:
 

Code :
  1. erase (it)->Molle();


 
pareil  :??:


Message édité par spinzero le 22-04-2009 à 11:54:50
n°1876221
Joel F
Real men use unique_ptr
Posté le 22-04-2009 à 11:55:51  profilanswer
 

erase( it->second); ....

n°1876241
spinzero
Posté le 22-04-2009 à 12:25:11  profilanswer
 

J'ai enfin trouvé erase dans la desc. du template, donc l'accès est + clair  :)  
 
Cependant:

Joel F a écrit :

erase( it->second); ....


C3861 'erase' Identifier not found  :heink:
 
Par contre:
 

Code :
  1. sparse2D.erase(Position(x, y));
  2. //ou
  3. sparse2D.erase(it);


 
est accepté...mais ça supprime carrement la colonne


Message édité par spinzero le 22-04-2009 à 13:56:14
n°1876264
Taz
bisounours-codeur
Posté le 22-04-2009 à 13:33:53  profilanswer
 

Tu veux pas lire la doc ?

n°1876279
spinzero
Posté le 22-04-2009 à 14:19:47  profilanswer
 

Taz a écrit :

Tu veux pas lire la doc ?


ok, y'a pas meilleur conseil
 
iterator erase(const_iterator position);
Erase the element pointed to by position.
 
Returns:
 The iterator following position before the erasure.
 
Throws:
 Only throws an exception if it is thrown by hasher or key_equal.
 
In this implementation, this overload doesn't call either function object's methods so it is no throw, but this might not be true in other implementations.
 
Encore merci pour vos remarques  :jap:


Message édité par spinzero le 24-04-2009 à 13:25:32
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Creation de tableau[C] Initialisation d'un tableau constant
Problème avec allocation dynamique de tableau (C)tri de plusieurs tableau
Créer un tableau de correspondanceExplication d un tableau sérialisé
recopie texte d'un champ dans un tableauRécupérer un graphique dynamique
Plus de sujets relatifs à : Tableau dynamique BOOST


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR