使用带有下标运算符的赋值运算符为std :: map赋值

时间:2018-01-25 15:48:57

标签: c++ c++11 matrix sparse-matrix

我有一个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;

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

2 个答案:

答案 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>);