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
Mary-Kate OlsenOriginal
2024-11-01 06:21:02573Durchsuche

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>

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>

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!

Stellungnahme:
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