0
我有一個叫做Object
的抽象類,我使用std::unordered_map<int, Object*> objects
將這些Object
包含在名爲DataSet
的類中。每個對象都有一個與之關聯的id
。從unordered_map中刪除值的有效方法,只給出值C++
通常,當從我的unordered_map
中刪除一個對象時,我可以只做iterator = find(id)
,然後在該迭代器上調用erase
。
這很簡單,高效。問題是,我必須實現一種方法來刪除一個條目/對的值,而不是通過密鑰(這是我的id
)。這使我的原型如下:
int DataSet::DeleteObject(Object* object)
什麼是完成這雖然最有效的方法是什麼?我在想我可以這樣做:
if(object){
for(auto kv : objects) {
if(kv.second == object) {
objects.erase(kv);
}
}
return 1;
}
但它似乎效率很低。那麼完成這個最有效的方法是什麼?
你肯定只有一個目標匹配您的條件:這可以用
find_if
,這也可以用作先前算法的變化來實現?如果你需要刪除多個對象,爲什麼在第一次「擦除」之後有返回? – Steephen更重要的是,它看起來*正確*?如果價值存在多次呢?還是根本不? 'erase(kv)'不起作用。你必須用* key *擦除,而不是按值擦除,即'擦除(kv.first)'。 –
我不認爲有一種有效的方法可以從地圖中刪除一個只有它的值的對象。特別是如果地圖是無序的。 –