0001 template <typename T> void SMMH<T>::insert( T e ) { //insert e into an SMMH 0002 Vector<T>::insert(e); //增加一个单元 0003 Rank k = _size - 1; //从末元素开始 0004 while (1) { //逐层上滤 0005 if ( isRC(k) && (_elem[k-1] > _elem[k]) ) //Property #0 0006 { _elem[k] = _elem[k-1]; k--; } 0007 if ( !hasGP(k) ) break; 0008 if ( e < _elem[lp(k)] ) //Property #1 0009 { _elem[k] = _elem[lp(k)]; k = lp(k); } 0010 else if ( _elem[rp(k)] < e ) //Property #2 0011 { _elem[k] = _elem[rp(k)]; k = rp(k); } 0012 else 0013 break; 0014 } 0015 _elem[k] = e; //新元素就位 0016 } //insert