正如标题所述,我正在使用std::list
。我在master.list
中有对象。然后我使用std::priority_queue
或其他任何名为sortedList
的内容来存储指向master.list
中对象的指针,现在它们全部按此sortedList
排序。因为它已排序,我可以使用sortedList.pop()
删除它们。
问题是如何在原始master.list
我想使用erase
,但只有指针时才使用迭代器。因为我想要速度,所以我真的不想在这里使用remove
。
答案 0 :(得分:3)
为什么不将迭代器存储在优先级队列中而不是原始指针?由于您使用的是列表,因此无需担心迭代器失效。然后你可以使用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);