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
Libérer: 2024-11-01 06:21:02
original
582 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal