我正在尝试使用数组作为映射键。我可以使用它,但是一旦尝试将其集成到类中,就会收到以下编译器错误:
在“ T&Matrix :: operator [](std :: array)[带有T = double的实例中]”:35:12:从这里需要20:24:错误:对“(std :: map,double,std :: less>,std :: allocator,double>>>)(const std :: array&)”的调用不匹配返回矩阵(索引);
这是我的代码的样子:
#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;
}
array
的包含#include <array> // Added include
#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]; // replace call operator
}
const T& operator[](const std::array<int,2>& index) const{ //return const reference
return matrix.at(index); // replace call operator
}
};
// Probably not necessary
// Add compare function
// Default is std::less, uses operator<
bool operator<(const std::array<int, 2> &lhs, const std::array<int,2> &rhs) {
return lhs.at(0) < rhs.at(0) ? true : lhs.at(0) > rhs.at(0) ? false : lhs.at(0) < rhs.at(0);
}
int main()
{
Matrix<double> M(10,10);
double a = 10;
M[{10,11}] = a;
return 0;
}
return matrix(index);
应该是:
return matrix[index];
注意[]
运算符。您也应该
#include <array>
。
P.S。std::array
is provided的比较运算符。