我正在尝试使用数组作为映射键。我可以使用它,但是一旦尝试将其集成到类中,就会遇到以下编译器错误:
这是我的代码如下所示:
#include <map>
template <typename T>
struct Matrix{
std::map<std::array<int,2>,T> matrix;
int rows;
int columns;
Matrix()
: rows(0),
columns(0)
{ }
Matrix(int rows,int columns)
: rows(rows),
columns(columns)
{ }
T& operator[](const std::array<int,2> index){
return matrix(index);
}
T& operator[](const std::array<int,2>& index) const{
return matrix(index);
}
};
int main(int argc, char *argv[])
{
Matrix<double> M(10,10);
double a = 10;
M[{10,11}] = a;
return 0;
}
最佳答案
在这些运算符中
T& operator[](const std::array<int,2> index){
return matrix(index);
}
T& operator[](const std::array<int,2>& index) const{
return matrix(index);
}
您正在尝试调用类模板std::map的不存在的运算符
matrix(index)
显然,您的意思是第一个下标运算符
matrix[index]
T& operator[](const std::array<int,2> &index){
return matrix[index];
}
在第二个下标运算符中,成员函数位于。
const T& operator[](const std::array<int,2>& index) const{
return matrix.at(index);
}
同样,第二个运算符应声明为带有限定符const的返回类型,即它应该返回一个常量引用,因为成员函数又是一个常量函数。
关于c++ - 数组作为映射键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60056776/