Heim >Backend-Entwicklung >C++ >Wie kann ich auf den zugrunde liegenden Container einer STL-Prioritätswarteschlange zugreifen?
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& Container(priority_queue<T, S, C>& q) { struct HackedQueue : private priority_queue<T, S, C> { static S& Container(priority_queue<T, S, C>& q) { return q.*&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:
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!