Skip to content

Commit cbe163f

Browse files
Modify HeapIterator constructor to add skip_delete
Updated HeapIterator constructor to include skip_delete parameter for controlling deletion of empty value key-value pairs.
1 parent 8fe2016 commit cbe163f

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

src/lab2/lab2.2-iterator.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,19 @@ bool operator==(const SearchItem &a, const SearchItem &b) {
110110
## 3.3 实现构造函数
111111
接下来你需要实现`HeapIterator`的构造函数, 其参数就是已经遍历了所有`Skiplist`的迭代器构造的`vector`, `max_tranc_id`你可以暂时忽略:
112112
```cpp
113+
HeapIterator::HeapIterator(bool skip_delete)
114+
: max_tranc_id_(0), skip_delete_(skip_delete) {
115+
// TODO: Lab2.2 实现 HeapIterator 构造函数
116+
}
113117
HeapIterator::HeapIterator(std::vector<SearchItem> item_vec,
114-
uint64_t max_tranc_id)
115-
: max_tranc_id_(max_tranc_id) {
118+
uint64_t max_tranc_id, bool skip_delete)
119+
: max_tranc_id_(max_tranc_id), skip_delete_(skip_delete) {
116120
// TODO: Lab2.2 实现 HeapIterator 构造函数
117121
}
118122
```
119123
120-
> Hint: 构造完堆后, 是否需要额外的一些初始化的滤除?
124+
> Hint 1: 构造完堆后, 是否需要额外的一些初始化的滤除?
125+
> Hint 2: (重要!!!)这里说明下`skip_delete`参数,这个参数用于控制迭代器是否删除`value`为空的键值对。`value`为空在逻辑上表示删除标记,这样的键值对是否保留取决于具体场景。当作为借口暴露给外部时,我们应该跳过删除的键值对;但用于数据刷盘时,删除标记是有效的存储记录,是不能被跳过的。
121126
122127
## 3.4 实现自增函数
123128
接下来自增函数是最重要的, 自增函数的逻辑是:

0 commit comments

Comments
 (0)