使用带下标运算符的赋值运算符将值赋给 std::map

Use assignment operator with subscript operator to assign value to std::map

我有一个矩阵class

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;

我将如何以最易读的方式去做?我不确定如何让下标和赋值运算符一起工作。

您必须提供成员:

const T& operator [](std::pair<std::size_t, std::size_t>) const;
      T& operator [](std::pair<std::size_t, std::size_t>);

让我们在 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
};