C++ 使用映射容器创建矩阵 模板类矩阵 { 公众: typedef映射M2;//用于放置1D信息 类型定义图M1; 地图数据; M1; M2; typedef typename映射::迭代器迭代器2; 迭代器2 itr2; typedef typename映射::迭代器迭代器1; 迭代器1 itr1; Matrix()//默认构造函数 { m2.插入件(对(1,10)); m2.插入件(对(2,20)); m2.插入件(对(3,30)); m1.插入件(一对(1,m2)); m2.清除(); m2.插入件(一对(1,40)); m2.插入件(对(2,50)); m2.插入件(对(3,60)); m1.插入件(对(2,m2)); m2.清除(); m2.插入件(对(1,70)); m2.插入件(成对(2,80)); m2.插入件(对(3,90)); m1.插入件(对(3,m2)); m2.clear();} 矩阵(常量映射和ar)//复制构造函数 {m1=ar.m1;} 矩阵和运算符=(常数矩阵和ass)//赋值 {if(this==&ass)返回*this; m1=ass.m1;返回*this;} 常量C和运算符()(int&index1,int&index2)//用于访问/修改数据 {itr1=m1.begin(); 预付款(itr1,index1-1); m2=(*itr1)。第二; itr2=m2.begin(); 预付款(itr2,index2-1); return(*itr2.second;} }; int main() { 矩阵mtr; cout

C++ 使用映射容器创建矩阵 模板类矩阵 { 公众: typedef映射M2;//用于放置1D信息 类型定义图M1; 地图数据; M1; M2; typedef typename映射::迭代器迭代器2; 迭代器2 itr2; typedef typename映射::迭代器迭代器1; 迭代器1 itr1; Matrix()//默认构造函数 { m2.插入件(对(1,10)); m2.插入件(对(2,20)); m2.插入件(对(3,30)); m1.插入件(一对(1,m2)); m2.清除(); m2.插入件(一对(1,40)); m2.插入件(对(2,50)); m2.插入件(对(3,60)); m1.插入件(对(2,m2)); m2.清除(); m2.插入件(对(1,70)); m2.插入件(成对(2,80)); m2.插入件(对(3,90)); m1.插入件(对(3,m2)); m2.clear();} 矩阵(常量映射和ar)//复制构造函数 {m1=ar.m1;} 矩阵和运算符=(常数矩阵和ass)//赋值 {if(this==&ass)返回*this; m1=ass.m1;返回*this;} 常量C和运算符()(int&index1,int&index2)//用于访问/修改数据 {itr1=m1.begin(); 预付款(itr1,index1-1); m2=(*itr1)。第二; itr2=m2.begin(); 预付款(itr2,index2-1); return(*itr2.second;} }; int main() { 矩阵mtr; cout,c++,matrix,map,multidimensional-array,operator-overloading,C++,Matrix,Map,Multidimensional Array,Operator Overloading,这个问题可能无法解决您所有的问题,但它是一个悬而未决的问题: template < class A, class B, class C> class Matrix { public: typedef map<B,C> M2; // for putting 1D info typedef map<A,M2> M1; map<M1, M2 > data; M1 m1; M2 m2; typ

这个问题可能无法解决您所有的问题,但它是一个悬而未决的问题:

   template < class A, class B, class C> class Matrix
  { 
    public:

   typedef map<B,C> M2; // for putting 1D info  
   typedef map<A,M2> M1;
   map<M1, M2 > data; 
   M1 m1;
   M2 m2;
   typedef  typename map<B,C>::iterator iterator2;
   iterator2 itr2; 
   typedef  typename map<A,M2>::iterator iterator1;
   iterator1 itr1;   
    Matrix()                             // default constructor
    { 
      m2.insert(pair<int,double> (1,10));
      m2.insert(pair<int,double> (2,20));
      m2.insert(pair<int,double> (3,30));
        m1.insert(pair <int, M2> (1,m2));
        m2.clear();

     m2.insert(pair<int,double> (1,40));
     m2.insert(pair<int,double> (2,50));
     m2.insert(pair<int,double> (3,60));
        m1.insert(pair <int, M2> (2,m2));
        m2.clear();

     m2.insert(pair<int,double> (1,70));
     m2.insert(pair<int,double> (2,80));
     m2.insert(pair<int,double> (3,90));
        m1.insert(pair <int, M2> (3,m2));
        m2.clear();                    }



    Matrix(const map<M1, M2>& ar)              //copy constructor 
    { m1 = ar.m1; }


    Matrix<A, B, C >& operator = (const Matrix<A, B, C >& ass)    //assignment
    { if (this==&ass) return *this;
      m1 = ass.m1; return *this; }


    const C& operator () ( int& index1,  int& index2 )  //for accessing/modifying data
     {    itr1 = m1.begin();
          advance(itr1,  index1 - 1);
          m2 = (*itr1).second;  
          itr2 = m2.begin();
          advance(itr2,  index2 - 1);             
          return (*itr2).second;      }
 };


int main()
{ 
  Matrix <int,int,double> mtr; 

   cout<< mtr(2,2);

    return 0;
  }
此外,映射迭代器不是随机访问迭代器,您不能这样做

Matrix <int,int,double> mtr;
尝试:


你从哪里得到错误?这是唯一的错误信息吗?在发布有关编译器错误的问题时,请包括完整且未经编辑的错误日志。不应该是
m2.insert(第(1,10)对);
m2.insert(第(B(1),C(10)对);
(还有
m1.insert(
(但这不是你的问题。请添加错误行)另一点:使用贴图存储矩阵会导致矩阵计算的性能非常差。
Matrix <int,int,double> mtr;
itr2 = m2.begin()+index2-1;
itr2 = std::advance(m2.begin(),  index2 - 1);