繁体   English   中英

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

[英]Convert object reference to STL iterator

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

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

有任何想法吗?

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

如果没有一种方法可以从某项获取到它的键(稀有但可行),则可以枚举整个multimap(从begin()到end())并擦除匹配的项。 希望这将是一个罕见的操作,因为它是O(N)。

不要混淆指针和迭代器。 有时(例如数组)指针可以充当迭代器。 但这并不一定。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM