STL 容器构造堆结构 使用堆结构构造资源池
class CTargetIdPool
{
public:
CTargetIdPool();
~CTargetIdPool();
bool IsPoolEmpty();
int GetTargetIdFromHeap();
void SetTargetIdToHeap(int id);
private:
std::vector<int> m_vecId = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 };
};
CTargetIdPool::CTargetIdPool()
{
make_heap(m_vecId.begin(), m_vecId.end(), greater<int>());
}
CTargetIdPool::~CTargetIdPool()
{
}
bool CTargetIdPool::IsPoolEmpty()
{
return m_vecId.empty();
}
int CTargetIdPool::GetTargetIdFromHeap()
{
if (IsPoolEmpty())
{
LOG(INFO) << "Pool Is Empty";
return -1;
}
pop_heap(m_vecId.begin(), m_vecId.end());
int nId = m_vecId.back();
m_vecId.pop_back();
return nId;
}
void CTargetIdPool::SetTargetIdToHeap(int id)
{
m_vecId.emplace_back(id);
push_heap(m_vecId.begin(), m_vecId.end());
}