Maison > développement back-end > C++ > Comment conserver l'ordre d'insertion dans un `std::map` tout en préservant des recherches efficaces ?

Comment conserver l'ordre d'insertion dans un `std::map` tout en préservant des recherches efficaces ?

Linda Hamilton
Libérer: 2024-12-06 09:37:11
original
239 Les gens l'ont consulté

How to Maintain Insertion Order in a `std::map` While Preserving Efficient Lookups?

Maintien de l'ordre d'insertion dans un std::map

Dans un scénario où un std::map ne parvient pas à conserver l'ordre d'insertion, le besoin se fait sentir d'un conteneur qui préserve cette propriété critique. Alors qu'un std::vector> semble être une alternative viable, sa perte de performances pour les recherches fréquentes et les opérations d'incrémentation jette des doutes sur son adéquation.

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal