按值删除地图元素

And*_*kov 5 c++ stl map

我会保持简短.

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

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

Jar*_*Par 8

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

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

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


Cra*_*rks 5

查看SGI 的 STL 文档

Map 有一个重要的特性,即向 Map 中插入新元素不会使指向现有元素的迭代器失效。从映射中擦除元素也不会使任何迭代器失效,当然,实际上指向被擦除元素的迭代器除外。

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