Я бы хотел вставить данные в мой класс Matrix
, используя оператор []
. Аргумент этого оператора, std::array<int, 2>
, является ключом для std::map
.
template <typename T>
class Matrix
{
public:
Matrix(const int& rows, const int& cols)
: rows(rows), cols(cols)
{}
std::map<std::array<int, 2>, T>& operator[] (std::array<int, 2> x) {
return data[x];
}
private:
std::map<std::array<int, 2>, T> data;
const int rows;
const int cols;
};
int main()
{
Matrix<double> M(10, 10);
M[{10, 10}] = (double) 10;
return 0;
}
Я не могу вернуть ссылку на карту так, чтобы ее можно было назначить и продолжаю получать следующую ошибку:
error: non-const lvalue reference to type 'std::map<std::array<int, 2>, double>' cannot bind
to a value of unrelated type 'std::__1::map<std::__1::array<int, 2>, double,
std::__1::less<std::__1::array<int, 2> >, std::__1::allocator<std::__1::pair<const std::__1::array<int, 2>,
double> > >::mapped_type' (aka 'double')
return data[x];
Я заработал, когда возвращал указатель на data[x]
, разыменовывал это и присваивал значение этому. Это не доставляет аккуратный код, и я думаю, что это можно сделать проще. Так чего мне здесь не хватает?