我有一个Matrix类
template <typename T>
class Matrix
{
public:
const size_t rows;
const size_t cols;
const std::map<std::array<int, 2>, T> data;
Matrix(int a, int b) : rows(a), cols(b)
{
}
};
初始化如下:
Matrix<double> M(5,5);
创建一个5x5矩阵。
我想像这样为地图指定值:
M[{1,2}] = 1;
我将如何以最易读的方式做到这一点?我不确定如何让下标和赋值运算符一起工作。
答案 0 :(得分:5)
让我们在Matrix
添加一些辅助别名
template <typename T>
class Matrix
{
// rather than stoping people changing the members via const
// make them private
size_t rows;
size_t cols;
map_type data;
public:
using key_type = std::array<size_t, 2>;
using mapped_type = T;
using map_type = std::map<key_type, mapped_type>;
Matrix(size_t r, size_t c) : rows(r), cols(c) { }
const T& operator [](key_type key) const { return data[key]; }
T& operator [](key_type key) { return data[key]; }
// other operations as appropriate
};
答案 1 :(得分:2)
您必须提供会员:
const T& operator [](std::pair<std::size_t, std::size_t>) const;
T& operator [](std::pair<std::size_t, std::size_t>);