我正在尝试在 C++ 中创建一个“稀疏”矢量类,如下所示:
template<typename V, V Default>
class SparseVector {
...
}
在内部,它将由一个表示std::map<int, V>
(其中V
存储的值的类型)。如果地图中不存在元素,我们将假装它等于Default
模板参数中的值。
但是,我在重载下标运算符时遇到了问题,[]
. 我必须重载[]
运算符,因为我将此类中的对象传递到期望[]
正常工作的 Boost 函数中。
这个const
版本很简单:检查索引是否在地图中,如果是则返回其值,Default
否则。
但是,非常量版本要求我返回一个引用,这就是我遇到麻烦的地方。如果值只是被读取,我不需要(也不想)向地图添加任何东西;但如果它正在被写入,我可能需要在地图中添加一个新条目。问题是重载[]
不知道一个值是被读取还是被写入。它只返回一个引用。
有没有办法解决这个问题?或者也许可以解决它?