# pragma> bool运营商()(const T&离开,const T&右)
{
返回左比;正确的;
}
};
template<类T>
struct少
{
bool运营商()(const T&离开,const T&右)
{
返回左& lt;正确的;
}
};
template
类
{
公共:
堆()
{
}
堆(const T *数组,size_t大小)
{
断言(数组);
(size_t我=0;我& lt;大小;+ + i)
{
_vec.push_back(阵列[我]);}
(int i=_vec.size ()/2 - 1;我在=0;——我)
{
_AdjustDown (_vec, _vec.size ());
}
}
堆(const vector
{
_vec.swap (vec);
(int i=_vec.size ()/2 - 1;我在=0;——我)
{
_AdjustDown (_vec, _vec.size ());
}
}
空白推(const T&x)
{
_vec.push_back (x);
如果_vec.size()比;0)
_AdjustUp (_vec, _vec.size () - 1),
}
空白Pop ()
{
交换(_vec [0], _vec [_vec.size ()——1]);
_vec.pop_back ();
_AdjustDown (_vec 0 _vec.size ());}
const T&GetTop ()
{
断言(_vec.size()比;0);
返回_vec [0];
}
bool空()
{
返回_vec.empty ();
}
size_t大小()
{
返回_vec.size ();
}
私人:
空白_AdjustDown (vector
{
int=根* 2 + 1,
,(左& lt;大小)
{
如果(左+ 1 & lt;大小,,Compare () (vec(左+ 1),vec(左)))
+ +左;
如果(比较()(vec(左),vec(根)))
{
交换(vec(左),vec(根));
根=左;
=根* 2 + 1,
}
其他打破;
}
}
空白_AdjustUp (vector
{
int父母=指数在祝辞1;
,(比较()(vec(指数),vec(父)))
{
交换(vec(指数),vec(父));
指数=父;
父=指数在祝辞1;
}
}
保护:
vector
};
空白测试()
{
arr int []={1、2、8、9、7、4、6、5、11、10};
Heap
h.Push (0);
h.Pop ();
cout & lt; & lt;h.GetTop () & lt; & lt;endl;
h.Pop ();
}