将对象引用转换为STL迭代器

时间:2011-12-23 22:03:44

标签: c++ stl reference iterator

我正在使用std :: multimap<>我将指向元素(T *)的指针传递给用C语言编写的组件。

当组件想要删除它回调给提供指针的C ++的对象时,我不确定是否有办法将T *转换为std :: multimap<> :: iterator以便我可以call erase()。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

如果您可以从项目中确定密钥,则可以使用equal_range获取所有可能的匹配项,然后在该范围内调用find。

如果没有办法从一个项目到它的键(很少但可能),那么可以通过整个多重图(从begin()到end())进行枚举并删除匹配的。希望这是一个罕见的操作,因为它是O(N)。

答案 1 :(得分:0)

不要混淆指针和迭代器。有时(例如数组)指针可以用作迭代器。但它不一定。

C ++中的迭代器通常会重载*运算符,即“解引用运算符”。这使得它们看起来更像C指针,当它们在技术上可能相同或不同时。

传递迭代器通常很脆弱,我会避免这种情况。特别是,在您的情况下同时修改多图可能会使迭代器无效。

答案 2 :(得分:0)

请记住,multimap是一组键值对。听起来您的T*,并且您需要一种有效的方法来获取其,以便您可以删除它。你考虑过Boost.Bimap了吗?该库允许双向有效映射。然后从调用代码中取出T*,查找密钥并删除它应该很简单。