我正在使用std :: map存儲某些對象。該地圖具有模板<Coordinate, Object>
。現在,我注意到地圖將座標轉換爲一個整數,然後基於該整數給該元素一個唯一的鍵。 (等於那個整數)C++ - std :: map替代方案不需要鑄造
現在,問題是無法將3維整數(x,y,z)轉換爲std :: map可以使用的單個整數。
std :: map有哪些替代方法要求key對象是唯一的,但不要求它被轉換爲整數(或字符串等)?
我正在使用std :: map存儲某些對象。該地圖具有模板<Coordinate, Object>
。現在,我注意到地圖將座標轉換爲一個整數,然後基於該整數給該元素一個唯一的鍵。 (等於那個整數)C++ - std :: map替代方案不需要鑄造
現在,問題是無法將3維整數(x,y,z)轉換爲std :: map可以使用的單個整數。
std :: map有哪些替代方法要求key對象是唯一的,但不要求它被轉換爲整數(或字符串等)?
您可以使用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;
ooo我甚至沒有添加比較運算符 –
*「我注意到的是,在地圖投射座標爲整」 * - 你輸了我。我不知道你在說什麼。你能否提供一些代碼來幫助證明你的問題? –
要檢查映射應該放置的值的順序,它會執行key1