我会保持简短。
我试图在字符串和对象指针之间保留一个映射,因此,我使用std :: map。我有一个管理器,它是一个跟踪地图的全局类,每当调用一个对象的析构函数时,它会告诉管理器它已被删除。
我能想到的唯一方法是在地图中搜索对象。是否有一个有效的STL解决方案来解决这个问题?是否存在按键搜索有效的地图?
答案 0 :(得分:8)
除了通过比较值进行迭代之外,没有一种有效的方法可以使用std :: map。
但是大多数情况下,值的键可以从值本身计算出来。例如,使用Person对象的Name属性作为键。管理者是否可以存储键/值对的列表而不是值本身。这将解决您的问题,而无需重写新算法。
或者您可以在经理类上保留反向地图。关键的本质价值。这样你就可以用它来计算以后删除的密钥。
答案 1 :(得分:4)
查看SGI's documentation for the STL,
地图具有重要的属性 将新元素插入地图 不会使迭代器失效 指向现有元素。擦除 地图中的元素也没有 使任何迭代器无效,除了 当然,对于实际的迭代器 指向正在存在的元素 擦除。
因此,您可以将迭代器存储到对象内的地图中,并在需要删除其条目时将其用作常量查找键。
答案 2 :(得分:1)