Maison >développement back-end >C++ >Comment conserver l'ordre d'insertion lors du stockage des paires clé-valeur en C ?

Comment conserver l'ordre d'insertion lors du stockage des paires clé-valeur en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-07 01:02:11224parcourir

How to Maintain Insertion Order When Storing Key-Value Pairs in C  ?

Stockage des paires clé-valeur insérées dans l'ordre avec std::map

Un std::map est une structure de données de conteneur qui stocke la clé -paires de valeurs dans un ordre trié en fonction de la clé. Cependant, lorsqu'il est nécessaire de conserver l'ordre d'insertion des paires, la carte ne propose plus cette fonctionnalité.

Solutions alternatives

  • std ::vector> : l'utilisation d'un vecteur pour stocker les paires permet un suivi facile de l'ordre d'insertion, mais cela peut être plus lent pour les recherches fréquentes (10 000 000 de fois).
  • boost::multi_index : Cette bibliothèque fournit un conteneur étendu qui permet plusieurs index sur la même structure de données. Il peut être utilisé pour créer un index pour l'ordre d'insertion, permettant d'itérer et d'accéder aux paires dans cet ordre.

Exemple de code :

Considérez cet extrait de code utilisant l'approche boost::multi_index :

#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/random_access.hpp>
#include <boost/multi_index/hashed_unique.hpp>

struct value_t {
  std::string s;
  int         i;
};

struct string_tag {};

typedef boost::multi_index_container<
  value_t,
  boost::multi_index::indexed_by<
    boost::multi_index::random_access<>, // Insertion order index
    boost::multi_index::hashed_unique<boost::multi_index::tag<string_tag>, boost::multi_index::member<value_t, std::string, &value_t::s>>
  >
> values_t;

Dans cet exemple, le conteneur values_t utilise deux index : un index d'ordre d'insertion et un index unique haché sur le membre s. Cela permet à la fois une itération ordonnée et des recherches efficaces par la touche s.

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