52      template< 
typename _Key, 
typename _Value, 
typename _KeyComp=std::greater<_Key>, 
typename _ValueComp=std::less<_Value> >
 
   56          typedef typename std::multimap<_Key,_Value,_KeyComp>::const_iterator iterator;
 
   57          typedef typename std::multimap<_Key,_Value,_KeyComp>::const_iterator const_iterator;
 
   69          mutable_priority_queue( 
const _KeyComp &keyComp, 
const _ValueComp &valComp ) : key2Val(keyComp), val2Key(valComp) { }
 
   87          inline iterator begin(){
 
   88            return key2Val.begin();
 
   92          inline iterator end(){
 
  103          inline void erase( _Value val ){
 
  104            typename std::map<_Value,_Key,_ValueComp>::iterator iter=val2Key.find( val );
 
  105            if( iter != val2Key.end() ){
 
  106              key2Val.erase( _find(iter->second,iter->first) );
 
  107              val2Key.erase( iter );
 
  113            return key2Val.empty();
 
  117          inline _Value front_value(){
 
  118            return (*key2Val.begin()).second;
 
  122          inline _Value front_key(){
 
  123            return (*key2Val.begin()).first;
 
  128            auto iter = key2Val.begin();
 
  133          inline void push( _Value val, _Key key ){
 
  142          inline void insert( _Value val, _Key key ){
 
  144            key2Val.insert( std::pair<_Key,_Value>( key, val ) );
 
  145            val2Key.insert( std::pair<_Value,_Key>( val, key ) );
 
  151          inline void update( _Value val, _Key key ){
 
  156          inline size_t size(){
 
  157            return key2Val.size();
 
  160          inline size_t count(_Value val)
 
  162            return val2Key.count(val);
 
  166          std::multimap< _Key, _Value, _KeyComp > key2Val;
 
  167          std::map< _Value, _Key, _ValueComp >    val2Key;
 
  169          inline void _erase( 
typename std::multimap<_Key,_Value,_KeyComp>::iterator it ){
 
  170            val2Key.erase( it->second );
 
  174          inline typename std::multimap<_Key,_Value,_KeyComp>::iterator _find( _Key k, _Value v ){
 
  175            typename std::multimap<_Key,_Value,_KeyComp>::iterator it = key2Val.lower_bound(k);
 
  176            typename std::multimap<_Key,_Value,_KeyComp>::iterator hi = key2Val.upper_bound(k);
 
  178              if( it->second == v )
 
  182            return key2Val.end();