2

我正在调试我的代码,有一次我有一个多图,其中包含一对 along和 aNote object创建如下:

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

我想看看这些值是否真的插入到多重映射中,所以我放置了一个断点,这就是多重​​映射的样子(在 Xcode 中):

在此处输入图像描述

似乎我可以无限打开元素(我的实际多图是第一个被调用的元素noteList)如果这是正常的任何想法以及为什么我无法读取实际的对值(长和注释)?

4

2 回答 2

1

似乎是呈现集合的组件中的错误。大约在列表的中间有一个条目是 0x00000000,但渲染继续低于该条目,但没有任何有效指针。也许您需要添加您自己对显示数据的常识性解释,并将空值视为树的该部分的结尾。

于 2012-08-07T12:09:21.927 回答
1

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

为了访问数据,它对特定于您提供的模板参数的节点类型执行静态转换。除非您可以强制转换,否则您将无法使用 XCode 查看数据。

它对链表做类似的事情,使用链表节点库。

编辑:这样做是为了删除模板生成的重复代码量。而不是有RbTree<Type1>, RbTree<Type2>, 等等;libstdc++ 有一组在基类上工作的操作,无论映射的基础类型如何,这些操作都是相同的。它仅在需要检查数据时进行转换,并且所有树的实际旋转/重新平衡代码都是相同的。

于 2012-08-08T00:54:24.470 回答