Maison >développement back-end >C++ >Comment puis-je accéder au conteneur sous-jacent d'une file d'attente prioritaire STL ?

Comment puis-je accéder au conteneur sous-jacent d'une file d'attente prioritaire STL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-01 06:21:02571parcourir

How can I access the underlying container of an STL priority_queue?

Accès au conteneur sous-jacent des adaptateurs de conteneur STL

La bibliothèque de modèles standard (STL) fournit des adaptateurs de conteneur tels que la pile, la file d'attente et la file d'attente prioritaire, qui offrent une interface pratique tout en fournissant une couche abstraite sur le conteneur sous-jacent. Cependant, il manque une méthode standardisée pour accéder au conteneur sous-jacent dans ces adaptateurs.

Implémentation actuelle

Dans certaines implémentations de la STL, telles que Visual de Microsoft Studio 2008, une méthode non standard appelée _Get_container() est disponible pour la pile et la file d'attente. Cependant, aucune méthode de ce type n'existe pour Priority_queue.

Accès au conteneur sous-jacent dans Priority_queue

Malgré l'absence de méthode standard, une solution de contournement a été conçue :

<code class="cpp">template <class T, class S, class C>
S&amp; Container(priority_queue<T, S, C>& q) {
    struct HackedQueue : private priority_queue<T, S, C> {
        static S&amp; Container(priority_queue<T, S, C>& q) {
            return q.*&amp;HackedQueue::c;
        }
    };
    return HackedQueue::Container(q);
}</code>

Ce code définit une fonction d'assistance Container() qui utilise une classe privée imbriquée HackedQueue pour accéder au conteneur sous-jacent c.

Utilisation

Avec ceci solution de contournement, vous pouvez accéder au conteneur sous-jacent de priorité_queue comme suit :

<code class="cpp">priority_queue<SomeClass> pq;
vector<SomeClass>& tasks = Container(pq);</code>

Documentation officielle

La documentation officielle de la STL peut être trouvée sur le lien suivant :

  • [C : Bibliothèque de modèles standard](https://en.cppreference.com/w/cpp/container)

Conclusion

Bien qu'il n'existe pas de méthode standard pour accéder au conteneur sous-jacent des adaptateurs de conteneur STL, la solution de contournement fournie offre une solution spécifiquement pour priorité_queue. Pour la pile et la file d'attente, la méthode non standard _Get_container() peut être utilisée si elle est disponible.

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