是否有一個數據結構(在STL或boost中可用),它接受兩個參數並將其映射到某個值?類似於雙參數映射的數據結構
例子有:用於以圖表的座標網格返回某些信息或得到一個邊的權重:
coordinate_quadrant(-1,-1)= 3
weight_of(U, v)= 10
象限示例可以用一個簡單的函數來完成,其中包含四個if語句。我主要是尋找一個適合體重例子的例子。我試圖避免創建一個邊類,並將其傳遞給weight_of(Edge edge)函數。
是否有一個數據結構(在STL或boost中可用),它接受兩個參數並將其映射到某個值?類似於雙參數映射的數據結構
例子有:用於以圖表的座標網格返回某些信息或得到一個邊的權重:
coordinate_quadrant(-1,-1)= 3
weight_of(U, v)= 10
象限示例可以用一個簡單的函數來完成,其中包含四個if語句。我主要是尋找一個適合體重例子的例子。我試圖避免創建一個邊類,並將其傳遞給weight_of(Edge edge)函數。
您可以使用std :: map < std :: pair < Type1,Type2 >,Type3 >。
在後端使用一對整數對象。換句話說,執行映射,但對於這對對象。您無法重寫operator []以接受多個參數,但可以在自定義地圖類上覆蓋運算符 (),以便您可以獲取一些語法糖,例如my_map[row](col) = whatever
我會考慮以下選擇:
選項1
的std ::地圖的std ::對<類型1,類型2>作爲密鑰和類型3作爲值
std::map< std::pair< Type1, Type2 >, Type3 > data;
選項2
2維的std ::向量
如果該Type1和Type2是整數,因爲你可能會發現模擬的圖形或笛卡爾空間時: 的std ::矢量<的std ::矢量<的Type3數據;
選項3
含Type1和Type2,它可以映射到的Type3
如果您也許希望與更多的值來裝飾你的兩種類型的用戶定義的類,你可以定義一個包含兩種類型的一類,並使用一個std ::地圖將其映射到第三式:
public:
MyClass(Type1 x, Type2 y) : x_(x), y_(y)
Type1 x() const {
return x_;
}
Type2 y() const {
return y_;
}
private:
Type1 x_;
Type2 y_;
};
std::map< MyClass, Type3 > data;
選項1的好處是,它是真正快速和容易編碼,並且對於任何知道C++的人來說都應該是有意義的。選項2可能會稍微快一點,並且可以輕鬆修改以獲得更多維度。選項2的缺點是您的值需要是整數索引到二維向量中。
在我看來選項3是對我最好的選擇,因爲它是可讀的,地方上的Type1和Type2的類型沒有要求,並可以擴展到包含在一個非常合理的方式更多的數據。缺點選項3的是,你需要定義一個嚴格的MyClass的對象彼此比較,但這是相當簡單:
bool operator<(const MyClass & rhs) const {
return (rhs.x() <= x() && rhs.y() <= y());
}
讓您的類的成員函數,你應該準備好了。
像編程的東西,在那裏,直到你考慮你在做什麼和多少時間,你願意投資的細節並不明顯正確的答案。不要忘記檢查關鍵存在和出界錯誤。 :)
您的運營商<是錯誤的,我想。如果lhs.x rhs.y,那麼lhs
MSalters
2009-07-13 10:33:19