按值删除地图元素

时间:2009-05-28 18:05:41

标签: c++ stl map

我会保持简短。

我试图在字符串和对象指针之间保留一个映射,因此,我使用std :: map。我有一个管理器,它是一个跟踪地图的全局类,每当调用一个对象的析构函数时,它会告诉管理器它已被删除。

我能想到的唯一方法是在地图中搜索对象。是否有一个有效的STL解决方案来解决这个问题?是否存在按键搜索有效的地图?

3 个答案:

答案 0 :(得分:8)

除了通过比较值进行迭代之外,没有一种有效的方法可以使用std :: map。

但是大多数情况下,值的键可以从值本身计算出来。例如,使用Person对象的Name属性作为键。管理者是否可以存储键/值对的列表而不是值本身。这将解决您的问题,而无需重写新算法。

或者您可以在经理类上保留反向地图。关键的本质价值。这样你就可以用它来计算以后删除的密钥。

答案 1 :(得分:4)

查看SGI's documentation for the STL

  

地图具有重要的属性   将新元素插入地图   不会使迭代器失效   指向现有元素。擦除   地图中的元素也没有   使任何迭代器无效,除了   当然,对于实际的迭代器   指向正在存在的元素   擦除。

因此,您可以将迭代器存储到对象内的地图中,并在需要删除其条目时将其用作常量查找键。

答案 2 :(得分:1)