使用映射容器创建矩阵
Creating matrix using map container
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++映射?
- 如何在 c++ 中创建结构向量的映射
- 我如何创建一个函数(),其中一帕雷米特是映射
- 通过从矢量中获取键和与映射中的键对应的值来创建映射
- 使用结构和映射创建priority_queue
- 为C++重载函数创建SWIG类型映射
- 使用Regex解析cpp中的字符串并创建映射
- 我正在尝试创建一个C++映射,该映射在boost内存映射文件中具有向量值
- 创建以向量/列表迭代器为键的映射
- Rust 在索引时是否隐式创建映射条目,例如C++
- 通过读取文件创建映射<字符串,矢量>时如何管理内存<string>
- 如何使用迭代器值创建映射
- 如何从userland中的分段内存创建映射
- 在C++中为数百万个对象创建映射
- 在 Android NDK 上创建映射/直接 OpenGL ES 纹理
- 如何在 vim 中创建映射以自动执行 .h c++ 文件的 ifdef 命令
- 创建映射元素时,请避免使用值副本
- 有效地创建映射与单一条目不同
- 在c++中从字典文件创建映射的映射
- 增强如何为类型选择创建映射