spinzero | 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 :
- #include <boost/unordered_map.hpp>
- //#include <tools/freelist.hpp>
- struct Position
- {
- friend size_t hash_value(Position const & p)
- {
- size_t seed = 0;
- boost::hash_combine(seed, p.x);
- boost::hash_combine(seed, p.y);
- return seed;
- }
- size_t x;
- size_t y;
- Position(size_t x, size_t y) : x(x), y(y)
- {}
- };
- bool operator == (Position const & l, Position const & r)
- {
- return l.x == r.x && l.y == r.y;
- }
- int id_one;
- struct Molle
- {
- int some_data;
- Molle() : some_data(id_one)
- {}
- };
- ...
- const size_t y_max = 3;
- boost::unordered_map< Position, Molle > sparse2D;
- typedef boost::unordered_map< Position, Molle >::iterator It;
- ...
- void mapMOLLE( int idA=NULL, int idB=NULL )
- {
- int dim = 2;
- size_t limit[y_max] = {dim};
- bool pMAPPED = false;
- size_t x = 0;
- size_t y = 0;
- bool found_A = false;
- size_t xA = 0;
- size_t yA = 0;
- bool found_B = false;
- size_t xB = 0;
- size_t yB = 0;
- while (y < y_max){
- It it = sparse2D.find(Position(x, y));
- if (it == sparse2D.end()) {
- ++y;
- x = 0;
- std::cout << std::endl;
- } else {
- if( idA ) {
- if( it->second.some_data == idA){
- xA = x; yA = y;
- found_A = true;
- }
- }
- //-------------------
- if( idB ){
- if( it->second.some_data == idB ){
- xB = x; yB = y;
- found_B = true;
- }
- }
- //-------------------
- ++x;
- }
- }
- if( !found_A && !found_B){
- if( idA && idB ){
- id_one = idA;
- sparse2D[Position(0, mol_i)] = Molle();
- id_one = idB;
- sparse2D[Position(1, mol_i)] = Molle();
- mol_i ++;
- }
- }
- else
- {
- if( found_A == true ){
- if( idB ){
- dim = xA +1;
- size_t limit[y_max] = {dim};
- if( found_B == true ){
- cleanMollePOS( xB, yB);
- }else{
- id_one = idB;
- sparse2D[Position( xA+1, yA)] = Molle();
- }
- }
- }
- if( found_B == true ){
- if( idA ){
- dim = xA +1;
- size_t limit[y_max] = {dim};
- if( found_A == true ){
- cleanMollePOS( xA, yA);
- }else{
- id_one = idA;
- sparse2D[Position(xB+1, yB)] = Molle();
- }
- }
- }
- }
|
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 :
- void cleanMollePOS( size_t x, size_t y ){
- It it = sparse2D.find(Position(x, y));
- if (it == sparse2D.end())
- {
- // Supprimer tt la ligne, donc 1 colonne ?
- }
- else
- {
- delete(it)->second;
- // dois-je modifier aussi le range comme lorsque j'ajoute avec mapMOLLE()?
- }
- }
|
Et si avez des remarques l'écriture mapMOLLE()...
merci Message édité par spinzero le 21-04-2009 à 18:28:32
|