2010-07-29 60 views
0

我有一個對象Line,其中包含Point類型的2個對象Point1Point2。我想創建一個包含行的HashMap,其鍵是std::pair<Point1, Point2>帶兩個鍵的哈希映射 - 查找鏈接到一個鍵的所有元素。 C++

我想要做的是找到所有的行被引用(例如)Point1,即密鑰std::pair<Point1, Anything>。我不在乎std::pair<Anything, Point1>

我不知道它是否可能,我希望它是。

感謝

回答

1

這聽起來像你真正想要的是一個std::multimap(或std::unordered_multimap),以個人點爲關鍵,行(pair<point, point>)作爲關聯值。或者,由於密鑰包含第一個點,因此您可以將其作爲std::multimap<point, point>來完成,以避免將Point1存儲兩次,一次作爲密鑰並再次作爲關聯值的一部分。無論哪種方式,查找所有使用特定點的行都很容易。

另一種可能性(如果線條集合是合理靜態的)將把你的線對象放入一個向量中,按照Point1排序。這(再次)可讓您快速搜索包含特定點的所有行。優點是這會減少您需要存儲的數據量(消除節點之間的指針),並且通常會提高搜索速度。缺點是插入或刪除項目相對較慢。

+0

感謝您的回答。 事實上,我的線不包含這些對點,它也有一些其他屬性,所以我需要保留線對象。點的順序很重要,我可能必須查找。怎麼樣兩個multimaps,一個用於第一點,另一個用於第二點?這需要一些記憶。 – ccote 2010-07-29 17:21:50

+0

而不是一個額外的地圖,它可能更容易找到所有的點,包括你正在尋找的,然後過濾這些只獲得它在正確的位置。 – 2010-07-29 17:49:04

0

當然最關鍵的不是一對,這是一個點 - Pont1要具體。這一對是數據,而不是關鍵。