Reputation: 695
I have priority_queue. My function delete not very rational in terms of memory consumption and time. I've seen similar themes, but they did not help me.
How to remove element not at top from priority_queue?
STL Priority Queue - deleting an item
How i can delete elements on log( n ).
My function:
void deleteFromTimeQueue(const K& key)
{
std::priority_queue<Record<K>, std::vector<Record<K>>, Comparator<K>> tmpTimeQueue_;
while (timeQueue_.size() > 0)
{
Record<K> it = timeQueue_.top();
if (it.getKey() == key)
{
timeQueue_.pop();
break;
}
tmpTimeQueue_.push(it);
timeQueue_.pop();
}
while (tmpTimeQueue_.size() > 0)
{
Record<K> it = tmpTimeQueue_.top();
timeQueue_.push(it);
tmpTimeQueue_.pop();
}
}
How i can delete elements whitout tmpTimeQueue_?
void deleteFromTimeQueue(const K& key)
{
std::priority_queue<Record<K>, std::vector<Record<K>>, Comparator<K>> tmpTimeQueue_;
while (timeQueue_.size() > 0)
{
Record<K> it = timeQueue_.top();
if (it.getKey() == key)
{
timeQueue_.pop();
continue;
}
tmpTimeQueue_.push(it);
timeQueue_.pop();
}
timeQueue_.swap(tmpTimeQueue_);
}
What number better 1 or 2?
Upvotes: 0
Views: 1535
Reputation: 26
Maybe implementing Priority-queue using LINK-LIST can be a good ideal. By that, you can search for the element and delete it as normal link list. Hope this can be helpful for you.
Upvotes: 1