représentation multi-cartes en mémoire

Je débogue mon code et à un moment donné, j’ai une carte multiple qui contient des paires d’un object long et d’un Note object créé comme ceci:

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

Je voulais regarder si ces valeurs sont réellement insérées dans la carte multiple, j’ai donc placé un point d’arrêt et voici à quoi ressemble la carte multiple (dans Xcode):

entrez la description de l'image ici

Il semble que je puisse ouvrir les éléments à l’infini (ma noteList réelle est le premier élément appelé noteList ) Des idées si cela est normal et pourquoi je ne peux pas lire les valeurs de la paire actuelle (la note longue et la note)?

libstdc ++ implémente ses cartes et ensembles à l’aide d’un arbre générique rouge / noir. Les noeuds de l’arborescence utilisent une classe de base _Rb_tree_node_base qui contient des pointeurs sur les mêmes types que les noeuds parent / left / right.

Pour accéder aux données, il effectue une conversion statique sur le type de nœud spécifique aux arguments de modèle fournis. Vous ne pourrez pas voir les données en utilisant XCode sauf si vous pouvez forcer le transtypage.

Il fait quelque chose de similaire avec les listes liées, avec une base de nœud de liste liée.

Éditer: Cela supprime la quantité de code en double générée par le modèle. Plutôt que d’avoir un RbTree , RbTree , etc. libstdc ++ a un seul ensemble d’opérations qui fonctionne sur la classe de base et ces opérations sont les mêmes quel que soit le type sous-jacent de la carte. Il lance uniquement lorsqu’il doit examiner les données et que le code de rotation / rééquilibrage actuel est le même pour tous les arbres.

Cela ressemble à un bogue dans le composant qui rend la collection. À peu près au milieu de la liste, il y a une entrée qui est 0x00000000, mais le rendu continue en dessous, sans aucun pointeur valide. Peut-être devrez-vous append votre propre interprétation de bon sens des données affichées et traiter une valeur nulle comme la fin de cette partie de l’arbre.