首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++:STXXL中哪种数据类型适合创建外部内存二进制搜索树?

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

Stack Overflow用户
提问于 2015-06-04 06:01:38
回答 2查看 217关注 0票数 2

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

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

我在STXXL:向量文档中读到,显然不可能使用指针,这是非常合乎逻辑的理解。

警告:不存储对外部向量元素的引用。在对向量元素的任何后续访问过程中,此类引用可能无效。

那么问题是,使用'stxxl‘数据类型保存二进制搜索树数据结构的替代方案是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-04 06:16:30

存储指向元素的迭代器,而不是指向元素的指针/引用。指针/推荐将因从磁盘分页而失效,但迭代器不会失效。

例如:

代码语言:javascript
运行
复制
// 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这样的操作,它甚至不会失效。删除它将将页写入/读取磁盘(只读取const_iterator),因此您可以将其视为不会失效的指针。

票数 1
EN

Stack Overflow用户

发布于 2015-06-04 06:16:16

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

代码语言:javascript
运行
复制
const stxxl::vector<int> &Node::getVectorFromNode() const
{
   return _VectorNodeMember;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30636076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档