【问题标题】:Internal storage of a std::map as a red-black treestd::map 作为红黑树的内部存储
【发布时间】:2018-01-06 00:40:42
【问题描述】:

在这个map 示例中:

std::map<int, int> m; 
for (int i = 0; i < 1000; i++) 
    m[2*i] = i;
for (i = 0; i < 1000; i++)   // just an example of filling a map
    m[2*i + 1] = i;

如何知道内部“红黑树”的样子?

哪些节点将成为其他节点的子节点?

在这样一个简单的示例中(直观地)理解这一点,可以让我更好地掌握红黑树图实现的工作原理。

我阅读了许多答案,例如 Why is std::map implemented as a red-black tree? 关于将 std::map 实现为红黑树,但它没有帮助。我还阅读了Red–black tree,但同样,一个简单的地图示例将有助于理解它的工作原理。

【问题讨论】:

  • 您的问题是什么?您想知道标准是如何指定std::map 的吗?你想知道红黑树是如何工作的吗?请注意,这两个问题都不适合 SO。
  • @PasserBy 我想通过一些 C++ 代码知道,在此处给出的示例中,哪个节点将是其他节点的子节点(更准确地说,在 std::map 结构的底层树中)。

标签: c++ dictionary tree red-black-tree


【解决方案1】:

如果不深入了解供应商的 std::map 实现的内部结构,您就无法知道。例如,在 vendor make std::map&lt;int 上使用尝试而不是红黑树。

该标准允许许多不同的选择,而供应商并不能就某个单一的最佳选择达成一致。

【讨论】:

  • 我知道它是依赖于实现的,但有没有办法通过查看地址&amp;m 附近的字节来分析做了什么
  • @Basj,是否可以确定这样的事情取决于实现。如果您想对其进行测试,您可以通过在调试器中运行您的程序并单步执行std::map 上的方法来获得成功。
猜你喜欢
  • 2023-03-14
  • 2014-05-05
  • 2020-11-06
  • 1970-01-01
  • 2016-07-14
  • 2012-07-08
  • 2011-02-10
  • 2014-07-28
  • 2010-09-06
相关资源
最近更新 更多