c++ - 内存中的多重映射表示

标签 c++ xcode multimap

我正在调试我的代码,有一次我有一个多重映射,其中包含一对 long 和一个 Note 对象,创建如下:

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 的第一个元素)如果这是正常的以及为什么我无法读取实际的对值(长和注释)?

最佳答案

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

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

它的作用与链表类似,具有链表节点基础。

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

关于c++ - 内存中的多重映射表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11845604/

相关文章:

c++ - 突然崩溃后,程序中的所有指针变量都被删除了吗?

xcode - 核心数据 : annotation: Failed to load optimized model (React Native)

C++ multimap 操作

c++ - 放置指向 shared_ptr 的多重映射的指针不起作用

c++ - 在 multimap 中使用 timespec 结构,在哪里和/或如何定义 operator<

c++ - 将堆栈实现为链接结构的解码器

c++ - 关于MFC开发的一些问题?

多态性和指针 vector 的c++问题

iphone - iOS : C to iOS of static const char array gives error

xcode - EventKit:为 EKCalendar 实现 "share"功能(entityTypeReminder)