88 void reSize(
unsigned,
unsigned);
89 void reShape(
unsigned,
unsigned);
96 void reSize(
unsigned newsize);
104 std::pair<unsigned,unsigned>,
165 if ( ! (&M != 0 ) ) {
170 if ( ! ((M.
m_dicc).empty()) ) {
178 for (
unsigned i=0; i<M.
rows(); ++i) {
179 for (
unsigned j=0; j<M.
cols(); ++j) {
193 if ( m_same != same ) {
220 : m_dicc(), m_rows(m), m_cols(n), m_same()
222 if (m == 0 || n == 0) {
244 if (rows() != o.
rows() || cols() != o.
cols()) {
248 for (
unsigned i=0; i<rows(); i++) {
249 for (
unsigned j=0; j<cols(); j++) {
250 if ( (*
this)(i,j) != o(i,j) ) {
280 this->m_cols = o.
cols();
281 this->m_rows = o.
rows();
309 typename Diccionario::iterator it = o.
m_dicc.begin();
313 this->m_dicc[ it->first ]= it->second;
314 this->m_dicc.insert( Diccionario::value_type( it->first , it->second ) );
341 std::swap( this->m_dicc , o.
m_dicc );
342 std::swap( this->m_cols , o.
m_cols );
343 std::swap( this->m_same , o.
m_same );
344 std::swap( this->m_rows , o.
m_rows );
355 if ( m == 0 || n == 0) {
402 if ( m * n == m_rows * m_cols ) {
421 assert(
"Matrix_Map<E>::operator()()" && (i < rows()) );
422 assert(
"Matrix_Map<E>::operator()()" && (j < cols()) );
424 typename Diccionario::const_iterator it;
425 std::pair<unsigned,unsigned> i_j (i,j);
426 it = m_dicc.find(i_j);
427 if ( it == m_dicc.end() ) {
464 assert(
"Matrix_Map<E>::operator()()" && (i < rows()) );
465 assert(
"Matrix_Map<E>::operator()()" && (j < cols()) );
468 typename Diccionario::iterator it;
469 std::pair<unsigned,unsigned> i_j (i,j);
470 it = m_dicc.find(i_j);
471 if ( it == this->m_dicc.end() ) {
472 std::pair<typename Diccionario::iterator,bool> IT;
473 IT = this->m_dicc.insert (
474 typename Diccionario::value_type (
475 std::pair<unsigned,unsigned>(i,j),
511 assert(
"Matrix_Map<E>::add()" && (rows() == O.
rows()) && (cols() == O.
cols()) );
514 for (
unsigned i=0 ; i<rows() ; ++i ) {
515 for (
unsigned j=0 ; j<cols() ; ++j ) {
516 this->operator()(i,j) += O(i,j);
540 assert(
"Matrix_Map<E>::substract()" && (rows() == O.
rows()) && (cols() == O.
cols()) );
542 for (
unsigned i=0 ; i<rows() ; ++i ) {
543 for (
unsigned j=0 ; j<cols() ; ++j ) {
544 this->operator()(i,j) -= O(i,j);
573 assert( (A.
cols() == B.
rows()) &&
" => Matrix_Map<E>::multiply()" );
577 for (
unsigned i=0; i<rows(); i++) {
578 for (
unsigned j=0; j<cols(); j++) {
580 for (
unsigned k=0; k<A.
cols(); k++) {
581 sum = sum + A(i,k) * B(k,j);
593 std::ostream& operator<<(std::ostream& COUT, const Matrix_Map<E>& M) {
594 COUT <<
'[' << M.rows() <<
'x' << M.cols() <<
']' << std::endl;
595 for (
unsigned i=0; i < M.rows(); ++i) {
596 for (
unsigned j=0; j < M.cols(); ++j) {
597 COUT <<
" " << M(i,j);
607 assert(
"This code has not been tested" );
611 for (
unsigned i=0; i<rows; i++) {
612 for (
unsigned j=0; j<cols; j++) {
629 #endif // Matrix_Map_h
friend Matrix_Map operator*(const Matrix_Map &A, const Matrix_Map &B)
Retorna A*B.
void substract(const Matrix_Map &)
Le resta a "*this" la matriz "O".
unsigned m_rows
Cantidad de filas de la matriz.
size_type capacity() const
Cantidad máxima posible de valores diferentes que pueden ser almacenados en la matriz.
value_type & reference
Tipo del objeto almacenado, similar al nombre usado en STL.
unsigned m_cols
Cantidad de columnas de la matriz.
Matrix_Map(unsigned m=1, unsigned n=1)
Constructor de vector.
unsigned count() const
Cantidad de valores almacenados en la matriz.
Matrix_Map & swap(Matrix_Map &o)
Intercambia los valores de "*this" y "o".
Funciones para manipular Matrix_BASE<>.
std::istream & operator>>(std::istream &CIN, Matrix< E > &M)
Obtiene del flujo CIN el valor para M[][].
bool check_ok(const Matrix< T > &M)
Verifica la invariante de la clase.
unsigned cols() const
Cantidad de columnas de la Matriz.
Matrix_Map & copy(const Matrix_Map &o)
Copia desde "o".
void clear()
Deja el valor de *this en el valor en que lo inicializa el constructor de vector. ...
Matrix_Map(const value_type V)
Matriz escalar de valor V.
void reShape(unsigned, unsigned)
Le ajusta las dimensiones a la matriz.
bool equals(const Matrix_Map &o) const
¿¿¿ (*this==o) ???
friend bool operator!=(const Matrix_Map &p, const Matrix_Map &q)
¿¿¿ (p != q) ???
const E & getDefault()
Valor almacenado en la mayor parte de la Matrix_Map.
unsigned size() const
Cantidad de valores almacenados en la matriz.
std::map< std::pair< unsigned, unsigned >, E > Diccionario
friend Matrix_Map operator+(const Matrix_Map &A, const Matrix_Map &B)
Retorna A+B.
Diccionario m_dicc
Vector que contiene los valores de la matiz.
unsigned rows() const
Cantidad de filas de la matriz.
E value_type
Tipo del objeto almacenado, similar al nombre usado en STL.
void setDefault(const E &same)
Define el escalar que por defecto está en todas las entradas de la Matrix_Map.
unsigned size_type
Tipo del tamaño de un objeto, similar al nombre usado en STL.
Matrix_Map & move(Matrix_Map &o)
Traslada el valor de "o" a "*this".
Matrix_Map & operator=(const Matrix_Map &o)
Sinónimo de this->copy(o)
Esta es una clase matriz muy chirrisquitica almacenada como una matriz rala implementada con Map...
friend bool check_ok(const Matrix_Map< T > &M)
Verifica la invariante de la clase.
void multiply(const Matrix_Map &, const Matrix_Map &)
Calcula la multiplicación A * B y la almacena en "*this".
void add(const Matrix_Map &)
Le suma a "*this" la matriz "O".
friend bool operator==(const Matrix_Map &p, const Matrix_Map &q)
¿¿¿ (p == q) ???
reference operator()(unsigned, unsigned)
Retorna una referencia al elemento [i,j] de la matriz.
friend Matrix_Map operator-(const Matrix_Map &A, const Matrix_Map &B)
Retorna A-B.
void reserve(size_type _Count)
Ajusta la matriz para que pueda almacenar n valores diferentes a getDefault().
void reSize(unsigned, unsigned)
Le cambia las dimensiones a la matriz.
friend class test_Matrix_Map
Datos de prueba para la clase.
E m_same
Valor almacenado en la mayor parte de la Matrix_Map.
const value_type & const_reference
Tipo del objeto almacenado, similar al nombre usado en STL.
bool same(const Matrix_Map &o) const
Retorna true si "o" comparte sus valores con "*this".