2009-05-28 66 views
5

我會保持這個簡短。按值刪除地圖元素

我想保留字符串和對象指針之間的映射,因此,我使用std :: map。我有一個管理器,它是一個跟蹤地圖的全局類,每當一個對象的析構函數被調用時,它就會告訴管理器它已被刪除。

我能想到的唯一方法是搜索對象的地圖。有沒有一個高效的STL解決方案來解決這個問題?是否存在有效利用關鍵字進行搜索的地圖?

回答

8

不,沒有一種有效的方式來做到這一點與std :: map,而不是迭代通過比較值。

然而,大多數情況下,值的關鍵是可以從值本身計算出來的。例如,使用Person對象的Name屬性作爲鍵。管理員是否可以存儲鍵值對的列表,而不是值本身。這將解決您的問題,而不必重寫一個新的算法。

或者,您可以在經理類上保留一個反向映射。本質上重視關鍵。這樣你就可以使用它來計算以後刪除的密鑰。

+0

謝謝!我甚至沒有想到讓對象存儲密鑰本身。絕對是比第二張地圖更好的解決方案。 – 2009-05-28 18:32:12

+0

+1,我會刪除我的答案,因爲它聽起來和你的一樣。 – 2009-05-28 18:36:44

4

看着SGI's documentation for the STL

地圖有 插入一個新元素到地圖 不壞迭代器 點到現有元素的重要屬性。從地圖中刪除 元素也不會使 無效任何迭代器,除了 當然,對於實際上 指向的元素是 已被刪除。

因此,您可以將迭代器存儲到對象內的映射中,並在需要刪除其條目時將其用作恆定時間查找鍵。