使用重载的 [] 运算符返回 std::map() 的可分配值
Returning assignable value for std::map() using overloaded [] operator
我想使用 []
运算符在我的 Matrix
class 中插入数据。此运算符的参数 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;
}
我无法 return 以可分配的方式引用地图,并不断收到以下错误:
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];
当 return 指向 data[x]
的指针时,我得到它的工作,取消引用它并为其分配一个值。这不会提供整洁的代码,我认为它可以更容易地完成。那么我在这里缺少什么?
如果你有地图:
std::map<std::array<int, 2>, T>
那么它的key_type
就是std::array<int,2>
而mapped_type
就是T
。 operator[]
取一个键,returns 取一个对应值的引用。
一个正确的方法是
T& operator[] (const std::array<int, 2>& x) {
return data[x];
}
或者如果你真的想要 T
作为键和数组作为值你更需要一个
std::map<T, std::array<int, 2>>
方法可以是
std::array<int,2>& operator[] (const T& x) {
return data[x];
}
我想使用 []
运算符在我的 Matrix
class 中插入数据。此运算符的参数 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;
}
我无法 return 以可分配的方式引用地图,并不断收到以下错误:
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];
当 return 指向 data[x]
的指针时,我得到它的工作,取消引用它并为其分配一个值。这不会提供整洁的代码,我认为它可以更容易地完成。那么我在这里缺少什么?
如果你有地图:
std::map<std::array<int, 2>, T>
那么它的key_type
就是std::array<int,2>
而mapped_type
就是T
。 operator[]
取一个键,returns 取一个对应值的引用。
一个正确的方法是
T& operator[] (const std::array<int, 2>& x) {
return data[x];
}
或者如果你真的想要 T
作为键和数组作为值你更需要一个
std::map<T, std::array<int, 2>>
方法可以是
std::array<int,2>& operator[] (const T& x) {
return data[x];
}