Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

erase的时候没有返回迭代器 #9

Open
396848385 opened this issue Oct 24, 2024 · 3 comments
Open

erase的时候没有返回迭代器 #9

396848385 opened this issue Oct 24, 2024 · 3 comments
Labels
enhancement New feature or request

Comments

@396848385
Copy link

现在erase没有返回迭代器,能否实现一版本返回迭代器的版本
(个人分析了下代码 由于offset有正有负 eraseslot时针对把冲突链move forward的情况 可能会把冲突链中当前erase_key的实际slot_index所在后面的元素move到slot_index前面,针对这种情况不太好返回下一个迭代器的位置 所以也没想到有啥好办法在erase方法实现返回迭代器 只能求助你们了)

@ZT-Alonzo
Copy link
Contributor

大佬为啥执着于返回迭代器呢,如果需要遍历删除,也可以先遍历一遍,把需要删掉的记录下来,然后过一遍删除

@wudisheng
Copy link
Contributor

大佬为啥执着于返回迭代器呢,如果需要遍历删除,也可以先遍历一遍,把需要删掉的记录下来,然后过一遍删除

这样删除前面的元素的时候可能会引起手里其它的迭代器失效吧?

@wudisheng
Copy link
Contributor

现在erase没有返回迭代器,能否实现一版本返回迭代器的版本 (个人分析了下代码 由于offset有正有负 eraseslot时针对把冲突链move forward的情况 可能会把冲突链中当前erase_key的实际slot_index所在后面的元素move到slot_index前面,针对这种情况不太好返回下一个迭代器的位置 所以也没想到有啥好办法在erase方法实现返回迭代器 只能求助你们了)

稍微讨论了一下,在现有的实现的包含删除的场景中,一个迭代器是没有一个良好定义的后继的,所以不大太会提供一个 iterator erase(iterator) 方法,但是一个 template <typename Pred> size_t erase_if(Pred) (或者对应的类似于 std::erase_if 的非成员方法)是可以做到的,我争取有时间的时候实现一个,您的使用场景如果强依赖这个功能的话也可以先自己实现一份。

@wudisheng wudisheng added the enhancement New feature or request label Dec 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants