[英]Erase an element in std::list using pointer not iterator
如標題所述,我正在使用std::list
。 我在master.list
有對象。 然后,我使用std::priority_queue
或任何稱為sortedList
的對象將指向對象的指針存儲在master.list
,並且所有sortedList
現在都在此sortedList
排序。 由於已排序,因此可以使用sortedList.pop()
刪除它們。
問題是如何優雅地將對象移回原始master.list
我想使用erase
,但是只有指針時才需要迭代器。 因為我想要速度,所以我真的不想在這里使用remove
。
為什么不將迭代器而不是原始指針存儲在優先級隊列中? 由於您使用的是列表,因此無需擔心迭代器無效。 然后,您可以只使用std::list::erase
。 存儲迭代器的開銷應該可以忽略不計,因為它僅持有指向列表節點的指針。
typedef std::list<T> MyListT;
typedef std::priority_queue<MyListT::iterator> MyQueueT;
MyListT myList;
MyQueueT myQueue;
myList.push_front(T());
myQueue.push_back(myList.begin());
// Later...
MyListT::iterator itr = myQueue.front();
myQueue.pop_back();
myList.erase(itr);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.