0

タイトルの通り、使ってstd::listいます。にオブジェクトがありますmaster.list。次に、オブジェクトへのポインターを my に格納するためstd::priority_queueに呼び出された a などを使用し、これですべてがソートされます。ソートされているので、 を使用して削除できます。sortedListmaster.listsortedListsortedList.pop()

問題は、元のオブジェクトをエレガントに削除する方法ですmaster.list

を使用したいのですeraseが、ポインターしかない間はイテレーターしかかかりません。スピードが欲しいので、ここでは本当に使いたくないですremove

4

1 に答える 1

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);
于 2013-02-16T00:09:58.720 に答える