Maintien de l'ordre d'insertion dans un std::map
Dans un scénario où un std::map
Une solution efficace consiste à utiliser une combinaison de std::map et std::vector. Comme la carte garantit des recherches efficaces basées sur des chaînes, vous pouvez copier le contenu de la carte dans un std::vector avant d'effectuer des opérations de tri. Un foncteur personnalisé peut être utilisé pour définir la logique de tri en fonction de l'ordre d'insertion.
Alternativement, la bibliothèque Boost propose une solution puissante avec boost::multi_index. Cela permet une indexation multiple d’un seul conteneur. Dans votre cas, la structure suivante peut être implémentée :
struct value_t { std::string s; int i; }; struct string_tag {}; typedef multi_index_container< value_t, indexed_by< random_access<>, // index representing insertion order hashed_unique<tag<string_tag>, member<value_t, string, &value_t::s>> > > values_t;
Ici, l'index random_access maintient l'ordre d'insertion tandis que l'index hashed_unique garantit l'identifiant de chaîne unique pour des recherches efficaces. Cette approche permet à la fois des recherches efficaces et la préservation de l'ordre d'insertion.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!