2013-02-15 70 views
0

如標題所述,我使用的是std::list。我有master.list中的對象。然後,我使用std::priority_queue或其他任何稱爲sortedList的指針來存儲指向我的master.list中的對象的指針,它現在都在此sortedList中排序。因爲它已分類,我可以使用sortedList.pop()將它們刪除。使用指針而不是迭代器清除std :: list中的元素

的問題是我怎麼能優雅地刪除對象回到我原來的master.list

我想用erase,但它只能採取迭代,而我只是指針。因爲我想要速度,所以我真的不想在這裏使用remove

+3

不要將指針存儲在優先級隊列中,而是存儲列表迭代器。 – 2013-02-16 00:00:56

+0

Kerrek擊敗了我! – 2013-02-16 00:10:39

回答

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); 
+0

優先級隊列將需要一個比較器,但是'typedef's在這裏消除了所有「醜陋的語法」缺點。 – Collin 2013-02-16 00:42:00

相關問題