我有一個對象Line
,其中包含Point
類型的2個對象Point1
和Point2
。我想創建一個包含行的HashMap,其鍵是std::pair<Point1, Point2>
。帶兩個鍵的哈希映射 - 查找鏈接到一個鍵的所有元素。 C++
我想要做的是找到所有的行被引用(例如)Point1
,即密鑰std::pair<Point1, Anything>
。我不在乎std::pair<Anything, Point1>
。
我不知道它是否可能,我希望它是。
感謝
我有一個對象Line
,其中包含Point
類型的2個對象Point1
和Point2
。我想創建一個包含行的HashMap,其鍵是std::pair<Point1, Point2>
。帶兩個鍵的哈希映射 - 查找鏈接到一個鍵的所有元素。 C++
我想要做的是找到所有的行被引用(例如)Point1
,即密鑰std::pair<Point1, Anything>
。我不在乎std::pair<Anything, Point1>
。
我不知道它是否可能,我希望它是。
感謝
這聽起來像你真正想要的是一個std::multimap
(或std::unordered_multimap
),以個人點爲關鍵,行(pair<point, point>
)作爲關聯值。或者,由於密鑰包含第一個點,因此您可以將其作爲std::multimap<point, point>
來完成,以避免將Point1存儲兩次,一次作爲密鑰並再次作爲關聯值的一部分。無論哪種方式,查找所有使用特定點的行都很容易。
另一種可能性(如果線條集合是合理靜態的)將把你的線對象放入一個向量中,按照Point1排序。這(再次)可讓您快速搜索包含特定點的所有行。優點是這會減少您需要存儲的數據量(消除節點之間的指針),並且通常會提高搜索速度。缺點是插入或刪除項目相對較慢。
當然最關鍵的不是一對,這是一個點 - Pont1要具體。這一對是數據,而不是關鍵。
感謝您的回答。 事實上,我的線不包含這些對點,它也有一些其他屬性,所以我需要保留線對象。點的順序很重要,我可能必須查找和。怎麼樣兩個multimaps,一個用於第一點,另一個用於第二點?這需要一些記憶。 –
ccote
2010-07-29 17:21:50
而不是一個額外的地圖,它可能更容易找到所有的點,包括你正在尋找的,然後過濾這些只獲得它在正確的位置。 – 2010-07-29 17:49:04