c++ stl中堆操作如何删除元素。
RT,我建立了一个vector,调用make_heap(vector.begin(),vector.end()),我现在想删掉一些heap里面的元素(不是第一个是中间的)...
RT,我建立了一个vector,调用make_heap(vector.begin(),vector.end()),我现在想删掉一些heap里面的元素(不是第一个是中间的)并且保持堆的特性。怎么做?(不能重建堆 )
展开
3个回答
展开全部
只能重建堆。堆的特性就是这样,只能在堆顶操作。
如果你真的需要时常在中间删掉元素,你根本不应该选择使用堆。
如果你真的需要时常在中间删掉元素,你根本不应该选择使用堆。
追问
如果只是修改里面的值呢?(那个值是建堆时用来比较的)我觉得我们可能经常会遇到这样的情况,快速的找到一组数中最大(最小)的值。我需要一个动态的堆。
追答
如果只是为了找最大最小值,用不着堆。直接放到Vector中,排好序就行了。要改某个值时,改完后重新选择它合适的位置。
如果堆的特性对你来说是一种负担,你就不应选择使用。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你想频繁增删随机元素,同时保证算法复杂度的话,不应该使用vector,更不应该使用heap
如用增删随机元素,使用set或者multiset。
如果只增删头尾元素,使用deque
如用增删随机元素,使用set或者multiset。
如果只增删头尾元素,使用deque
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询