2013-07-28 40 views
0

我正在使用std :: map存儲某些對象。該地圖具有模板<Coordinate, Object>。現在,我注意到地圖將座標轉換爲一個整數,然後基於該整數給該元素一個唯一的鍵。 (等於那個整數)C++ - std :: map替代方案不需要鑄造

現在,問題是無法將3維整數(x,y,z)轉換爲std :: map可以使用的單個整數。

std :: map有哪些替代方法要求key對象是唯一的,但不要求它被轉換爲整數(或字符串等)?

+3

*「我注意到的是,在地圖投射座標爲整」 * - 你輸了我。我不知道你在說什麼。你能否提供一些代碼來幫助證明你的問題? –

+0

要檢查映射應該放置的值的順序,它會執行key1

回答

2

您可以使用Coordinate作爲地圖的關鍵。你只需要爲它定義一個strict weak ordering(類似於小於或大於比較)。你怎麼做到的就是你的,但你可以,例如,執行使用3個座標逐一比較:

#include <tuple> // for std::tie 

struct Coordinate 
{ 
    double x, y, z; 
    .... 

    bool operator<(const Coordinate& rhs) const 
    { 
    return std::tie(x, y, z) < std::tie(rhs.x, rhs.y, rhs.z); 
    } 
}; 

這裏,這是通過在萊比運營商的實施做了Coordinate,但你也可以定義一個函數對象,並用它來構建圖:

struct Comp 
{ 
    bool operator()(const Coordinate& lhs, const Coordinate& rhs) const 
    { 
    return std::tie(lhs.x, lhs.y, lhs.z) < std::tie(rhs.x, rhs.y, rhs.z); 
    } 
}; 

然後

std::map<Coordinate, ValueType, Comp> m; 
+0

ooo我甚至沒有添加比較運算符 –