类似STL的Java红黑树/树集/映射和带有非故障快速/安全迭代器的链表
我正在寻找一个具有红黑树和链表实现的库,它提供不会快速失败的迭代器。我想拥有和STL一样的C++功能,也就是:类似STL的Java红黑树/树集/映射和带有非故障快速/安全迭代器的链表,java,iterator,linked-list,red-black-tree,Java,Iterator,Linked List,Red Black Tree,我正在寻找一个具有红黑树和链表实现的库,它提供不会快速失败的迭代器。我想拥有和STL一样的C++功能,也就是: 在树/列表中插入不会使任何迭代器无效 移除仅使指向被移除元素的迭代器无效 可以以某种方式存储迭代器的“位置”,并引用它所指向的值 这个实现会很好,因为它提供了在使用列表/树的一部分时修改列表/树的能力。以下是一些例子: 获取链表/红黑树中与O(1)中某个存储值相邻的元素 批量插入/移除(无约束,例如每个位置增量移除一次) 通过迭代器的位置拆分O(1)中的链表 当存储了迭代器的位置
- 在树/列表中插入不会使任何迭代器无效
- 移除仅使指向被移除元素的迭代器无效
- 可以以某种方式存储迭代器的“位置”,并引用它所指向的值
- 获取链表/红黑树中与O(1)中某个存储值相邻的元素
- 批量插入/移除(无约束,例如每个位置增量移除一次)
- 通过迭代器的位置拆分O(1)中的链表
- 当存储了迭代器的位置时,更有效的删除(例如,通过将迭代器保持在链表中的某个位置,删除是O(1),而不是O(N))
如果没有这样的库,是否有其他库可以帮助我自己实现这两个数据结构?这两个库都很容易实现。迭代器必须做三件事:
while (it.hasNext()) {
potentially_delete_the_last_element()
it.next() // oops, may throw NoSuchElementException.
}
避免这种情况的方法是永远不要在检查是否有next/prev和实际检索next/prev之间修改列表。这两种方法都很容易自己实现。迭代器必须做三件事:
while (it.hasNext()) {
potentially_delete_the_last_element()
it.next() // oops, may throw NoSuchElementException.
}
避免这种情况的方法是永远不要在检查是否有next/prev和实际检索next/prev之间修改列表。听起来像是一个不可变的树,而链表将完美地满足您的需要(这里是一个AVL树)。您能够为您的项目使用不可变的数据结构吗?如果是这样,您可能可以使用一个不可变的排序集(googleit,很多Java实现),或者我可以为您将一个好的ML实现改编成Java。我认为这样的树是不可变的,以防止对键的修改导致树的重新平衡,但另一方面,链表不必是不可变的,对吗?听起来像是不可变的树和链表可以完美地满足您的需要(这里是一个AVL树)。您能够为您的项目使用不可变的数据结构吗?如果是这样,您可能可以使用一个不可变的排序集(googleit,很多Java实现),或者我可以为您将一个好的ML实现改编成Java。我认为这样的树是不可变的,以防止对键的修改导致树的重新平衡,但另一方面,链表不必是不可变的,对吗?