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!