【问题标题】:set::insert and iterator validityset::insert 和迭代器有效性
【发布时间】:2022-07-18 04:23:43
【问题描述】:

set::insert 不会更改迭代器有效性 [cplusplus.com]

std::set 的常见实现是红黑树。有人可以帮我理解为什么参考 RB-tree 插入迭代器有效性没有变化吗?

我理解 RB-tree 插入的方式是先将其转换为 2,4-tree,进行插入,然后再转换回来。但是,来自a previous question

使用基于 B-tree 的实现,由于节点拆分和合并,这些新结构上的擦除成员函数可能会使树中其他元素的迭代器无效

【问题讨论】:

    标签: data-structures


    【解决方案1】:

    有人可以帮我理解为什么没有对 RB-tree 插入的迭代器有效性进行更改吗?

    因为我认为集合迭代器只是作为一个指向节点的指针来实现的。正如你所说,集合通常被实现为 RB-tree。

    现在虽然父、左、右指针和颜色可能会改变,但节点的内容是相同的。对于 std::set、std::map,节点的迭代器保持有效,直到节点被删除。

    RB-tree 插入 RB-tree 插入可以原位完成,无需任何转换。

    【讨论】:

      猜你喜欢
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多