首頁 >後端開發 >C++ >如何存取 STLpriority_queue 的底層容器?

如何存取 STLpriority_queue 的底層容器?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-01 06:21:02573瀏覽

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

訪問STL容器適配器的底層容器

標準模板庫(STL)提供了stack、queue和priority_queue等容器適配器,它提供容器適配器了一個方便的接口,同時在底層容器上提供了一個抽象層。然而,這些適配器中缺乏訪問底層容器的標準化方法。

目前實作

在STL 的某些實作中,例如Microsoft 的Visual Studio 2008 中,有一個名為_Get_container() 的非標準方法可用於堆疊和佇列。然而,priority_queue 不存在這樣的方法。

存取priority_queue 中的底層容器

儘管缺乏標準方法,但已經設計了一種解決方法:

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

此程式碼定義了一個輔助函數Container(),它利用巢狀的私有類別HackedQueue 來存取底層容器c。

用法

使用此解決方法,您可以如下存取priority_queue的底層容器:

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

官方文件

STL的官方文件可以在以下連結找到:

    [C : 標準範本庫](https://en.cppreference.com/w/cpp/container )

結論

雖然沒有標準方法來存取STL容器適配器的底層容器,但提供的解決方法專門為priority_queue提供了解決方案。對於堆疊和佇列,如果可用,可以使用非標準 _Get_container() 方法。

以上是如何存取 STLpriority_queue 的底層容器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn