Maison >développement back-end >C++ >Comment puis-je maintenir l'ordre d'insertion dans un std::map, en particulier avec un nombre limité d'éléments ?

Comment puis-je maintenir l'ordre d'insertion dans un std::map, en particulier avec un nombre limité d'éléments ?

DDD
DDDoriginal
2024-12-07 13:29:14285parcourir

How Can I Maintain Insertion Order in a std::map, Especially with a Limited Number of Elements?

std::Map avec ordre d'insertion

Garder une trace de l'ordre d'insertion dans un std::map est crucial lorsque l'ordre des éléments est important . Bien que std::map trie principalement les éléments en fonction de valeurs clés, il existe deux solutions potentielles pour répondre à vos besoins :

Solution 1 : Utiliser std::Vector

Bien que vous avez mentionné des problèmes de performances lors de l'utilisation de std :: vector en raison de recherches et d'incréments fréquents, un std :: vector couplé à un comparateur personnalisé peut maintenir l'ordre d'insertion. Cependant, il est important de noter que cette approche peut effectivement introduire des inconvénients de performances si le nombre d'éléments augmente de manière significative.

Solution 2 : Boost::Multi-Index

Pour votre scénario spécifique avec un nombre limité d'éléments (50), la bibliothèque multi-index Boost fournit une solution robuste. Il permet la création d'un conteneur avec plusieurs index. Dans votre cas, l'extrait de code suivant montre comment définir un conteneur multi-index qui suit à la fois l'ordre d'insertion et les identifiants de chaîne uniques :

struct value_t {
  string s;
  int    i;
};

struct string_tag {};

typedef multi_index_container<
    value_t,
    indexed_by<
        random_access<>, // this index represents insertion order
        hashed_unique<tag<string_tag>, member<value_t, string, &value_t::s>>
    >
> values_t;

Ce conteneur multi-index permet des recherches efficaces basées sur l'identifiant de chaîne tout en en préservant l'ordre d'insertion via l'index "random_access".

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!

Déclaration:
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