Heim > Backend-Entwicklung > C++ > Wie kann ich auf den zugrunde liegenden Container einer STL-Prioritätswarteschlange zugreifen?

Wie kann ich auf den zugrunde liegenden Container einer STL-Prioritätswarteschlange zugreifen?

Mary-Kate Olsen
Freigeben: 2024-11-01 06:21:02
Original
578 Leute haben es durchsucht

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

Zugriff auf den zugrunde liegenden Container von STL-Containeradaptern

Die Standard Template Library (STL) stellt Containeradapter wie Stack, Queue und Priority_Queue bereit. die eine praktische Schnittstelle bieten und gleichzeitig eine abstrahierte Ebene über dem zugrunde liegenden Container bereitstellen. Es fehlt jedoch eine standardisierte Methode für den Zugriff auf den zugrunde liegenden Container in diesen Adaptern.

Aktuelle Implementierung

In einigen Implementierungen der STL, wie z. B. Microsoft Visual Studio 2008 ist eine nicht standardmäßige Methode namens _Get_container() für Stack und Queue verfügbar. Allerdings gibt es für „priority_queue“ keine solche Methode.

Zugriff auf den zugrunde liegenden Container in „priority_queue“

Obwohl es keine Standardmethode gibt, wurde eine Problemumgehung entwickelt:

<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>
Nach dem Login kopieren

Dieser Code definiert eine Hilfsfunktion Container(), die eine verschachtelte private Klasse HackedQueue verwendet, um auf den zugrunde liegenden Container c zuzugreifen.

Verwendung

Damit Um dies zu umgehen, können Sie wie folgt auf den zugrunde liegenden Container von Priority_Queue zugreifen:

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

Offizielle Dokumentation

Die offizielle Dokumentation für die STL finden Sie unter folgendem Link:

  • [C: Standardvorlagenbibliothek](https://en.cppreference.com/w/cpp/container)

Fazit

Obwohl es keine Standardmethode für den Zugriff auf den zugrunde liegenden Container von STL-Container-Adaptern gibt, bietet die bereitgestellte Problemumgehung eine Lösung speziell für „priority_queue“. Für Stack und Queue kann die nicht standardmäßige Methode _Get_container() verwendet werden, sofern verfügbar.

Das obige ist der detaillierte Inhalt vonWie kann ich auf den zugrunde liegenden Container einer STL-Prioritätswarteschlange zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage