我正在调试我的代码,有一次我有一个多图,其中包含一对long
和Note object
这样的对象:
void Track::addNote(Note ¬e) {
long key = note.measureNumber * 1000000 + note.startTime;
this->noteList.insert(make_pair(key, note));
}
我想查看这些值是否实际插入到多地图中,因此我放置了一个断点,这就是多图的样子(在Xcode中):
似乎我可以无限地打开元素(我的实际多图是第一个叫做noteList
的元素)任何想法,如果这是正常的,为什么我不能读取实际的对值(长和注)?
答案 0 :(得分:1)
似乎是呈现集合的组件中的错误。在列表的大约一半处有一个0x00000000的条目,但渲染继续低于该条目,但没有任何有效的指针。也许您需要添加自己对显示数据的常识解释,并将空值视为树的该部分的结尾。
答案 1 :(得分:1)
libstdc ++使用通用的红/黑树实现它的地图和集合。树的节点使用基类_Rb_tree_node_base
,其包含指向父/左/右节点的相同类型的指针。
要访问数据,它会对特定于您提供的模板参数的节点类型执行静态强制转换。除非您可以强制执行转换,否则您将无法使用XCode查看数据。
它与链表类似,具有链表节点库。
编辑:这样做是为了删除模板生成的重复代码量。而不是RbTree<Type1>
,RbTree<Type2>
等等; libstdc ++有一组操作在基类上的操作,无论地图的底层类型如何,这些操作都是相同的。它仅在需要检查数据时进行转换,并且所有树的实际轮换/重新平衡代码都相同。