簡體   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