0001 template <typename T> void SMMH<T>::insert(T e) { //insert e into an SMMH 0002 Vector::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