priority_queue - 删除不是top的元素

priority_queue - delete not a top elements

我有priority_queue。我的函数 delete 在内存消耗和时间方面不是很合理。 我看过类似的主题,但它们对我没有帮助。

How to remove element not at top from priority_queue?

STL Priority Queue - deleting an item

我如何删除 log( n ) 上的元素。

我的函数:

1

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();
                }
            }

我如何删除没有tmpTimeQueue_的元素?

2

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_);
        }

1 或 2 哪个更好?

也许使用 LINK-LIST 实现优先级队列是一个很好的理想选择。这样,您就可以搜索该元素并将其删除为正常的 link 列表。希望对您有所帮助。