Implémentation de std :: map par Visual C ++

Comment std :: map est-il implémenté dans Visual C ++?

Je sais que certaines structures de données arborescentes marquent simplement les nœuds comme supprimés lorsqu’ils sont supprimés, au lieu de les supprimer immédiatement. Je dois m’assurer que mes éléments ne sont jamais comparés à des éléments qui ne figurent plus sur la carte.

MODIFIER:

Je sais que la mise en œuvre est probablement correcte par rapport à. le contrat, ce qui m’oblige à avoir une commande totale faible sur le type d’élément. Cependant, je n’ai qu’un ordre partiel, ce qui ne permet pas de comparer des éléments qui ne sont pas actifs en même temps.

Que l’implémentation conserve les nœuds effacés ou non, elle doit appeler le destructeur d’object contenu lorsque le nœud est effacé . Après cela, il ne peut pas éventuellement transmettre l’object à une fonction de comparaison car cela provoquerait un comportement non défini, ce qui en ferait une implémentation non conforme.

Réponse à la mise en œuvre de la structure de données en général plutôt qu’à MSVC ou std::map :

Vous semblez penser que l’utilisateur du conteneur doit connaître l’indicateur pour ignorer les éléments supprimés.

Si la mise en œuvre signale simplement un élément comme n’étant plus incluse, elle le fera comme détail de la mise en œuvre . Cela signifie que du sharepoint vue de tout utilisateur extérieur du conteneur, cet élément ne sera pas visible du tout dans le conteneur. En particulier, l’une des méthodes de recherche sur le conteneur remarquera l’indicateur et ignorera tout ce à quoi il est attaché. Tant que l’implémentation conserve correctement la sémantique, vous n’avez pas à vous soucier de savoir si elle utilise une technique de marquage.

Je ne suis au courant d’aucun bogue dans l’implémentation de Microsoft STL dont vous devez vous préoccuper ici. Ce serait un bogue pour la classe d’avoir access aux éléments déjà supprimés à des fins de comparaison , bien que je puisse imaginer comment le nettoyage pourrait se dérouler hors bande.

Si vous avez vraiment besoin de détails sur l’implémentation, examinez le code source derrière la suppression d’éléments dans

et depuis votre code en cours d’exécution dans l’EDI.