gpt4 book ai didi

c++ - 使用 map 容器创建矩阵

转载 作者:行者123 更新时间:2023-11-28 02:53:48 27 4
gpt4 key购买 nike

   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;
}

如果我编译上面的程序,我会收到以下错误“cannot convert 'Matrix<int, int, double>' to 'double' in assignment.”我认为我尝试过重载运算符的方式有问题但到目前为止无法解决...

我知道这不是创建矩阵的有效方法,但由于我是初学者,如果您能帮助我理解这段代码背后的问题,那将会有所帮助...

问题解决了!谢谢

最佳答案

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

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

这行代码并没有按照您的想法进行。它没有定义对象 mtr , 而不是声明返回 Matrix <int,int,double> 的函数类型。

定义对象mtr

Matrix <int,int,double> mtr;

还有,map迭代器不是random_access_iterator,你做不到

itr2 = m2.begin()+index2-1;

尝试:

itr2 = std::advance(m2.begin(),  index2 - 1);

关于c++ - 使用 map 容器创建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22449747/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com