在存储器多重映射表示(multimap representation in memory)

2019-09-20 22:39发布

我调试我的代码,并在一个点上我有一个包含对一的多重映射longNote object是这样创建的:

void Track::addNote(Note &note) {
    long key = note.measureNumber * 1000000 + note.startTime;
    this->noteList.insert(make_pair(key, note));
}

我想看看,如果这些值在多地图实际插入所以我把一个断点,这是多重映射的样子(在Xcode中):

好像我可以打开无限的元素(我的实际多重映射被称为第一要素noteList )任何想法,如果这是正常的,为什么我不能读取实际对值(长和注)?

Answer 1:

的libstdc ++实现它使用通用的红/黑树地图和集。 树的节点使用一个基类_Rb_tree_node_base其中包含指向同一类型的父/左/右节点。

要访问数据后,进行静态浇铸到节点类型的特定于你所提供的模板参数。 您将无法使用Xcode中看到的数据,除非你可以强制转换。

它与链表类似的东西,有一个链表节点的基础。

编辑:这样做是为了去除由模板生成重复的代码量。 而不是具有RbTree<Type1> RbTree<Type2>等等; 的libstdc ++具有单组上的基类工作的操作,及这些操作是相同的,无论基础类型的地图的。 它只有当它需要检查数据类型转换和实际旋转/平衡代码是所有的树木一样。



Answer 2:

好像在呈现集合组件的错误。 大约一半在列表中向下有是00000000的条目,但呈现持续低于,没有任何有效的指针虽然。 也许你需要添加所显示的数据的自己的常识性的解释和处理空值作为树的那部分的结束。



文章来源: multimap representation in memory