我试图在C创建一个“稀疏”载体类++,像这样:重载操作符[]为稀疏向量
template<typename V, V Default>
class SparseVector {
...
}
在内部,它会被一个std::map<int, V>
(表示,其中V
是存储的值类型)。如果地图中没有元素,我们将假设它等于来自模板参数的值Default
。
但是,我无法重载下标操作符[]
。我必须重载[]
运算符,因为我将此类中的对象传递给了一个Boost函数,该函数预计[]
能正常工作。
const
版本很简单:检查索引是否在映射中,如果是,则返回其值,否则为Default
。
但是,非const版本要求我返回一个引用,这就是我遇到麻烦的地方。如果该值仅为,则为,我不需要(也不想)向地图添加任何内容;但如果是写成,我可能需要在地图中添加一个新条目。问题是,超载[]
不知道是否值读取或写入。它仅仅返回一个参考。
有什么办法可以解决这个问题吗?或者也许要解决它?
boost :: mapped_vector <>应该做类似的事情 - 你可以研究它的想法(或者只是使用它)。 – 2009-09-06 17:10:19
它不支持我的默认值,而且,我打算为二维矩阵做这件事,所以直接使用它是不可能的。但仍然是一个有用的参考! – Thomas 2009-09-06 19:08:09