Quelle est la meilleure façon (en C++) de configurer un conteneur permettant une double indexation? Plus précisément, j'ai une liste d'objets, chacun indexé par une clé (éventuellement multiple par clé). Cela implique un multimap. Le problème avec ceci, cependant, est que cela signifie une recherche peut-être pire que linéaire pour trouver l'emplacement d'un objet. Je préfèrerais éviter la duplication de données, donc garder chaque objet à sa propre coordonnée et se déplacer dans la map serait mauvais (sans compter que le déplacement de votre propre objet peut appeler indirectement votre destructeur dans une fonction membre!). Je préfère un conteneur qui conserve un index à la fois par pointeur d'objet et par coordonnées, et que les objets eux-mêmes garantissent des références/pointeurs stables. Ensuite, chaque objet pourrait stocker un itérateur à l'index (y compris la coordonnée), suffisamment abstrait, et savoir où il se trouve. Boost.MultiIndex semble être la meilleure idée, mais c'est très effrayant et je ne veux pas que mes objets réels aient besoin d'être const.Meilleur conteneur pour la double indexation
Que recommanderiez-vous?
EDIT: Boost Bimap semble bien, mais fournit-il une indexation stable? C'est-à-dire que si je change la coordonnée, les références à d'autres éléments doivent rester valides. La raison pour laquelle je veux utiliser des pointeurs pour l'indexation est que les objets n'ont pas d'ordre intrinsèque, et qu'un pointeur peut rester constant pendant que l'objet change (permettant son utilisation dans un MultiIndex Boost, qui, IIRC, fournit une indexation stable).
Votre article semble utiliser "clé" et "coordonnée" de façon interchangeable; Pouvez-vous clarifier? Votre application nécessite-t-elle une relation plusieurs-à-plusieurs entre les clés et les objets, ou une clé peut-elle faire référence à de nombreux objets mais à une seule clé par objet? –