2013-02-28 79 views
0

我想將X,Y和距離的組合存儲在數據結構中。 其中X和Y是整數。 距離是X和Y之間的距離。C++鍵值關係

這將是最好的數據結構在C++中使用,以便我可以在以後找到組合是否存在於列表中?

+0

什麼是?請給更多的背景 – tlehman 2013-02-28 23:17:21

+0

他意味着關鍵,價值的關係。我有一個待處理的標題編輯爲 – 2013-02-28 23:18:08

+0

您的列表有多大?你怎麼訪問它很多?你可以在vector中使用2 int/float/double的類/結構體。如果你沒有很多點迭代只使用矢量,那麼地圖將更快地查找。哈希映射甚至更快。所以請告訴我們更多的細節 – Gilad 2013-02-28 23:21:31

回答

2

您可能想要使用std::set作爲存儲。你需要/需要一個比較函數來考慮座標(距離直接從它們派生出來,所以你不需要比較它)。

編輯:根據評論,涉及大量的點,std::unordered_set可能是一個更好的選擇。它可能會更多的工作,但允許插入和搜索複雜性,你通常希望是恆定的。

2

用適當的散列表示該std::unordered_set

1

編輯:問題改變了,緯度/經度消失了,有些事情已經澄清。我開始了:

你的問題似乎意味着距離計算不僅僅是一個簡單的std :: abs(X-Y),因爲根本沒有意義存儲結果來加快速度。我假設你有一個昂貴的函數計算它,讓我們說:

int distance(int X, int Y) { /* heavy stuff */ } 

現在,你需要決定是否要調用它,或者如果你已經做了這一點,你可以重複使用的結果。你需要一個容器來保存結果和功能使用:

typedef std::pair< int, int > key; 
std::map< key, int > values; 

int quick_distance(int X, int Y) 
{ 
    const auto k = key(X,Y); 
    const auto it = values.find(k); 
    if(it != values.end()) return it->second; 
    const auto d = distance(X,Y); 
    values[k] = d; 
    return d; 
} 
+0

基本上我想要做的是計算2點之間的距離,並在數據結構中存儲點和距離。稍後查找點是否已經存在於該數據結構中,如果是,則返回距離或者計算點之間的距離並插入到數據結構中。 – Angel 2013-02-28 23:45:11

+0

是的這正是我想要做的。我有一個複雜的函數來計算距離,我想重複使用距離值,而不是每次重做。謝謝:)它幫了很多 – Angel 2013-03-01 00:07:19

+0

values [k] = d;除了values.insert(k,d);對 ? – Angel 2013-03-01 00:21:49