C++:STXXL 中的哪种数据类型适合创建外部内存二进制搜索树?

C++: Which Data Type in STXXL is suitable to create External Memory Binary Search Tree?

我想创建一个外部存储器二进制搜索树数据结构,其数据位于外部存储器中,使用 stxxl 作为库。

为此,STXXL 中的哪种数据类型适合用作树中的节点。如果我们使用 stxxl:Vector 作为树的节点,我们如何保存指向它们的指针。

我在 STXXL:Vector 文档中读到,显然不可能使用指针,这很合乎逻辑。

Warning : Do not store references to the elements of an external vector. Such references might be invalidated during any following access to elements of the vector .

那么问题是什么是使用 'stxxl' 数据类型保存二叉搜索树数据结构的替代方法?

可以直接保留节点结构中的stxxl::vector。但是,在使用和遍历节点时,您需要 return 向量的引用而不是向量本身。如果你直接 return 向量,你将深度复制它,这是不可行的。从现有节点返回引用是一种安全的使用方式:

const stxxl::vector<int> &Node::getVectorFromNode() const
{
   return _VectorNodeMember;
}

存储指向元素的迭代器而不是 pointers/refs 指向元素。 Pointers/refs会因为分页to/from磁盘而失效,但是迭代器不会失效。

例如:

// Safe to store this, not safe to store &nodes[node_index].
stxxl::vector<Node>::iterator node_it = nodes.begin() + node_index;

... 和 const_iterator 用于只读目的。

node_it 除非删除元素,否则不会失效。与 STL 不同,如果您执行 push_back 之类的操作,它甚至不会失效。取消引用它将 write/read 页 to/from 磁盘(仅读取 const_iterator),因此您可以将其视为不会失效的指针。