【发布时间】:2019-10-04 16:45:51
【问题描述】:
如果这是重复的,我深表歉意。我保证我会先尝试找到答案。
我想使用向量创建一个二进制堆。为此,我必须实现一个弹出函数,该函数删除“顶部”。在这种情况下,它只是删除了第一个元素。
我尝试使用移动功能,例如:
items[Root()] = std::move(items[cur_size--]);
这应该将根与另一个元素交换,然后它会重新排序(这也没有工作)。
相反,我尝试了以下方法:
std::vector<int> items;
int root = 0;
size_t Root() {
return root;
}
void Pop() {
items.erase(items.begin()+root);
root++;
// here I would call the reorder function
}
通过这种方式,我将有效地更改根并像向量从第 n 个位置开始一样操作,而不是从 0 开始。
我的问题是,这有意义吗,还是有更好的方法可以实现它?
编辑:添加矢量
【问题讨论】:
-
为什么不增加/减少索引而不是移动所有数据?
-
@Jose 这就是我在第二部分中所做的,移动根索引并擦除原始根
-
片段有点小,无法真正理解第一个代码的问题。你确定你的意思是
[cur_size--]?经常用数组/向量代码,cur_size表示数组末尾之后的元素,所以在贬义之前索引是错误的,所以你的意思可能是[--cur_size] -
@GemTaylor 解决了我的问题,谢谢!
标签: c++ vector erase binary-heap