内存中的多图表示

时间:2012-08-07 12:06:47

标签: c++ xcode multimap

我正在调试我的代码,有一次我有一个多图,其中包含一对longNote object这样的对象:

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

我想查看这些值是否实际插入到多地图中,因此我放置了一个断点,这就是多图的样子(在Xcode中):

enter image description here

似乎我可以无限地打开元素(我的实际多图是第一个叫做noteList的元素)任何想法,如果这是正常的,为什么我不能读取实际的对值(长和注)?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

它与链表类似,具有链表节点库。

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