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