【发布时间】:2010-11-26 01:03:10
【问题描述】:
我正在尝试在 C++ 中创建一个“稀疏”矢量类,如下所示:
template<typename V, V Default>
class SparseVector {
...
}
在内部,它将由std::map<int, V> 表示(其中V 是存储值的类型)。如果地图中不存在某个元素,我们将假设它等于模板参数中的值Default。
但是,我在重载下标运算符[] 时遇到了问题。我必须重载 [] 运算符,因为我将此类中的对象传递到期望 [] 正常工作的 Boost 函数中。
const 版本很简单:检查索引是否在地图中,如果是则返回其值,否则Default。
但是,非常量版本要求我返回一个引用,这就是我遇到麻烦的地方。如果该值只是读取,我不需要(也不想)向地图添加任何内容;但如果它正在编写,我可能需要在地图中添加一个新条目。问题是重载的[] 不知道一个值是读取还是写入。它只是返回一个引用。
有什么办法可以解决这个问题吗?或者也许可以解决它?
【问题讨论】:
-
boost::mapped_vector 应该做类似的事情 - 你可以研究它以获得想法(或者只是使用它)。
-
它不支持我的默认值,而且,我打算对二维矩阵执行此操作,因此直接使用它是不可能的。但仍然是一个有用的参考!
标签: c++ operator-overloading subscript sparse-matrix