gpt4 book ai didi

c++ - 内存中的 multimap 表示

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:35 25 4
gpt4 key购买 nike

我正在调试我的代码,有一次我有一个多重映射,其中包含一对 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

似乎我可以无限地打开元素(我的实际 multimap 是第一个名为 noteList 的元素)任何想法是否正常以及为什么我无法读取实际的对值(长和注释)?

最佳答案

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

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

它做的事情与链表类似,有一个链表节点库。

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com