A voir également:
- Matrice avec stl
- Excel vous ne pouvez pas modifier une partie de matrice ✓ - Forum Excel
- Vous ne pouvez pas modifier une partie de matrice - Forum Excel
- Inverse matrice excel ✓ - Forum Excel
- Calculatrice matrice - Télécharger - Calcul & Conversion
- Exemple matrice de flux firewall excel - Forum Réseau
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")
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
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