Dans les situations où l'ordre d'insertion est crucial, s'appuyer uniquement sur un std::map peut ne pas suffire. Si le maintien de l'ordre d'insertion est une priorité, il existe des approches alternatives à considérer.
Une option consiste à convertir le contenu de la carte en std::vector avant d'itérer et d'imprimer ses valeurs. En tirant parti d'un foncteur approprié, vous pouvez utiliser std::sort pour organiser les éléments en fonction de leur ordre d'insertion.
Cependant, si des recherches rapides sont essentielles (par exemple, 10 millions de fois), l'utilisation d'un vecteur peut introduire des performances. préoccupations. Pour de tels scénarios, la bibliothèque boost::multi_index propose une solution qui combine l'efficacité d'une carte avec la flexibilité de plusieurs index.
Utilisation de boost::multi_index:
Cette bibliothèque vous permet d'établir plusieurs index pour chaque conteneur. Dans ce cas spécifique, vous pouvez définir une structure value_t avec des membres string et int, et utiliser deux index :
Vous pouvez ensuite instancier un multi_index_container comme ceci :
struct value_t { string s; int i; }; struct string_tag {}; typedef multi_index_container< value_t, indexed_by< random_access<>, // insertion order hashed_unique<tag<string_tag>, member<value_t, string, &value_t::s>> > > values_t;
Cette approche permet des recherches efficaces tout en préservant l'ordre d'insertion lors de l'itération du conteneur.
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!