2009-05-28 37 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

地图有 插入一个新元素到地图 不坏迭代器 点到现有元素的重要属性。从地图中删除 元素也不会使 无效任何迭代器,除了 当然,对于实际上 指向的元素是 已被删除。

因此,您可以将迭代器存储到对象内的映射中,并在需要删除其条目时将其用作恒定时间查找键。