【问题标题】:Issue while designing B+Tree template class in C++在 C++ 中设计 B+Tree 模板类时的问题
【发布时间】:2010-10-17 17:43:01
【问题描述】:

我正在尝试编写 B+Tree 的通用 C++ 实现。我的问题来自于 B+Tree 中有两种节点;内部节点包含指向子节点的键和指针,叶节点包含键和值,内部节点中的指针既可以指向其他内部节点,也可以指向叶节点。 我不知道如何使用模板对这种关系建模(我不想使用强制转换或虚拟类)。

希望有解决我的问题的方法,或者有更好的方法在 C++ 中实现 B+Tree。

【问题讨论】:

  • 或许std::map的实现能给你一些想法?
  • 您如何为特定类型的键和值设计它?你能让它作为非模板工作吗?然后用模板参数替换特定类型。

标签: c++ templates b-tree


【解决方案1】:

最简单的方法:

bool mIsInternalPointer;
union {
  InternalNode<T>* mInternalNode;
  LeafNode<T>* mLeafNode;
};

这可以通过使用boost::variant 来稍微简化:)

【讨论】:

  • 乍看之下我选择了实现它的方式,但我期望一些更“模板化”的东西。我的意思是,这似乎是一个 hacky 低级技巧(不是类型安全的,这就是我喜欢模板的原因);但听起来这是做我该做的唯一方法。
  • @fokenrute: 使用boost::variant 你会得到类型安全:)
猜你喜欢
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
相关资源
最近更新 更多