C++ B树合并

发布于 2024-12-21 18:14:16 字数 720 浏览 3 评论 0原文

作为示例,我有以下 B 树模型,每个节点都包含标签/值对。树表示优先级(或优先级),根最高,叶最低(但这是特定于应用程序的)。我想将一个新的树部分合并到父级中,新部分包含潜在的公共标签/值对,一直到叶节点上方的节点(完全重复的新树部分不会被合并)。例如,

现有树(标记、值)对指示:

            A,0
 ,----------,-------------,
B,1        B,2           B,3
      ,-------------,
     C,1           C,2

要合并的新树:

               A,0
                |
               B,3
          ,-----------,
         C,1         C,2

最终合并树:

            A,0
 ,----------,-----------------,
B,1        B,2               B,3
      ,-------------,    ,-----------,
     C,1           C,2  C,1         C,2

问题:是否有一个优雅的 C++ 解决方案可以使用 std 容器来实现此 b 树合并,或者可以使用 boost 这样的库?谢谢。

As an example, I've the following b-tree model with each node containing tag/value pairs. The tree indicates precedence (or priority), with the root being highest, down to the leaves as lowest (but this is application specific). I want to merge a new tree section into the parent, with the new section containing potentially common tag/value pairs all the way down to the node just above a leaf node (a completely duplicate new tree section would just not be merged). E.g.

Existing tree (tag,value) pairs indicated:

            A,0
 ,----------,-------------,
B,1        B,2           B,3
      ,-------------,
     C,1           C,2

New tree to merge:

               A,0
                |
               B,3
          ,-----------,
         C,1         C,2

Final merged tree:

            A,0
 ,----------,-----------------,
B,1        B,2               B,3
      ,-------------,    ,-----------,
     C,1           C,2  C,1         C,2

Question: is there an elegant C++ solution to this b-tree merge using std containers, or possible with a library like boost? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

So要识趣 2024-12-28 18:14:16

您可以使用 Kasper Peeter 的 tree.hh 库,它是 GPLv2 和 GPLv3。

它是类似于 N 叉树的 STL 实现。

文档说有一个名为 merge 的可变算法,可以合并两棵树。它还解释了它是如何实现的。

You can use Kasper Peeter's tree.hh library, it's GPLv2 and GPLv3.

It's an STL like implementation for an n-ary tree.

The documentation says that there's a mutable algorithm, named merge, that can merge two trees. It also explains how it's achieved.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文