#ifndef AFDS_PRIORITY_SET
#define AFDS_PRIORITY_SET
#include<queue>
#include<vector>template<classT,classComp=std::less<T>>classPrioritySet{// warning: all erase operations must be legal.private:std::priority_queue<T,std::vector<T>,Comp>data;std::priority_queue<T,std::vector<T>,Comp>erased;public:PrioritySet(void):data(),erased(){};PrioritySet(std::vector<T>&init){for(auto&v:init)insert(v);}inlinevoidinsert(constTx){data.push(x);}inlinevoiderase(constTx){erased.push(x);}inlineconstT&top(void)noexcept{// assert(data.size() >= erased.size());while(!erased.empty()&&data.top()==erased.top()){data.pop(),erased.pop();}returndata.top();}inlinesize_tsize(void){returndata.size()-erased.size();}};#endif // AFDS_PRIORITY_SET
#line 1 "src/alfred/data_structure/priority-set.hpp"
#include<queue>
#include<vector>template<classT,classComp=std::less<T>>classPrioritySet{// warning: all erase operations must be legal.private:std::priority_queue<T,std::vector<T>,Comp>data;std::priority_queue<T,std::vector<T>,Comp>erased;public:PrioritySet(void):data(),erased(){};PrioritySet(std::vector<T>&init){for(auto&v:init)insert(v);}inlinevoidinsert(constTx){data.push(x);}inlinevoiderase(constTx){erased.push(x);}inlineconstT&top(void)noexcept{// assert(data.size() >= erased.size());while(!erased.empty()&&data.top()==erased.top()){data.pop(),erased.pop();}returndata.top();}inlinesize_tsize(void){returndata.size()-erased.size();}};