优先队列中实现随机点删除

priority_queue可以通过继承来自定义随机点删除(优先队列默认为最大堆)

template<typename T>
class custom_priority_queue : public std::priority_queue<T, std::vector<T>>
{
    public:
        bool remove(const T& value) {
            auto it = std::find(this->c.begin(), this->c.end(), value);
            if (it != this->c.end()) {
                this->c.erase(it);
                std::make_heap(this->c.begin(), this->c.end(), this->comp);
                return true;
            }
            else return false;
        }
};

可通过priority_queue中的protected成员c和comp来进行子类的继承引用。

posted @ 2021-12-24 11:52  程序小喵  阅读(68)  评论(0编辑  收藏  举报