priority_queue - 不删除顶部元素

时间:2015-01-13 09:34:11

标签: c++ stl queue std

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

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?

1 个答案:

答案 0 :(得分:1)

使用LINK-LIST实现优先级队列可能是一个很好的理想选择。通过这种方式,您可以搜索元素并将其删除为普通链接列表。希望这对你有所帮助。