Matrice avec stl
Bonjour
Existe-t-il un type particulier pour definir une matrice avec la stl?
pour le moment je declare un:
vector< vector <int>>Matrix
Mais c pas pratique a utiliser.
Par exemple le Matrix.resize() ne marche pas
Merci
Existe-t-il un type particulier pour definir une matrice avec la stl?
pour le moment je declare un:
vector< vector <int>>Matrix
Mais c pas pratique a utiliser.
Par exemple le Matrix.resize() ne marche pas
Merci
1 réponse
-
Existe-t-il un type particulier pour definir une matrice avec la stl?
pour le moment je declare un:
vector< vector <int>>Matrix
Ca c'en est une ;o)
Mais c pas pratique a utiliser.
Par exemple le Matrix.resize() ne marche pas
Perso j'ai utilisé construit une classe de matrice creuse avec la classe set (listes chainées croisées "horizontalement" et "verticalement")class Maillon{ protected: unsigned int ligne; unsigned int colonne; public: Maillon(unsigned const i,unsigned const j):ligne(i),colonne(j){}; inline unsigned int getLigne() const{return ligne;} inline unsigned int getColonne() const{return colonne;} }; struct cmpMaillon{ bool operator()(Maillon const & a,Maillon const & b){ return a.getLigne()<b.getLigne() || (a.getLigne()==b.getLigne() && a.getColonne()<b.getColonne()); } bool operator()(Maillon const * a,Maillon const * b){ return a->getLigne()<b->getLigne() || (a->getLigne()==b->getLigne() && a->getColonne()<b->getColonne()); } }; class Matrice{ vector< set<Maillon*,cmpMaillon> > mat; bool setVal(unsigned int const i,unsigned int const j); //... }; bool Matrice::setVal(unsigned int const i,unsigned int const j){ return mat[i].insert(new Maillon(i,j)).second; }
Bon j'ai un eu charcuté le code que j'utilise donc il y a peut être une ou deux erreurs mais c'est en gros l'idée ;o)
Rq: contrairement à la solution avec des vectors, l'accès à M(i,j) n'est pas immédiat : la recherche se fait par dichotomie (et ouais c'est une matrice creuse). ceci dit c'est beaucoup plus léger en mémoire. Dans mon cas j'avais une matrice symétrique 600 000 x 600 000 et ça tournait bien.
Bonne chance