我試圖在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