我有一個std::multimap
,其中值的類型爲std::function
。由於沒有std::function
的比較 - 請參見this - 似乎無法從此多圖移除特定元素。例如,如果你想要,例如,從值中刪除一個元素,我想也是一樣。 a std::list
或std::vector
。Multimap以std :: function作爲值
我的用例是一個函數,它需要一個回調參數(std::function
)。回調應在特定事件發生時調用。但是,在被調用者希望在被解僱之前「撤銷」回調的情況下,還可能存在其他情況。
最初我雖然讓我把std::function
包裝在一個結構中,並在我的地圖中插入指向這個結構的指針。然而,這並不是可行的,因爲接口用戶不必將回調包裝在結構和存儲指針值中。
我現在最好的想法是在註冊回調時返回一個id - 如果被叫方想要稍後取消回叫,則必須存儲這個id。
我的泡菜有什麼想法嗎?
你的「id」建議是我會做的。 – 2013-03-17 01:02:54
'std :: multimap'不會在插入/擦除時使迭代器無效,因此您可以只存儲新插入元素的迭代器,並將其用於擦除元素。即使我不知道'std :: multimap'很好,我經常使用這個方法來處理'std :: list',這就像一個魅力。由於對迭代器的約束似乎是相同的,我沒有理由爲什麼它不應該工作,除非我錯過了一些細節。 – syam 2013-03-17 01:16:21
我已經結合了這兩個評論。我返回一個id,並且我返回的id是「保存」multimap中條目的迭代器。這使得刪除非常簡單的'mulitmap.erase(it)'。我還鍵入了迭代器,以便它類似於'class :: id_t'。感謝您的輸入 – 2013-03-18 09:43:16