Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh mengakses bekas asas STL priority_queue?

Bagaimanakah saya boleh mengakses bekas asas STL priority_queue?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 06:21:02573semak imbas

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

Mengakses Bekas Dasar Penyesuai Bekas STL

Pustaka Templat Standard (STL) menyediakan penyesuai bekas seperti tindanan, baris gilir dan priority_queue, yang menawarkan antara muka yang mudah sambil menyediakan lapisan abstrak di atas bekas asas. Walau bagaimanapun, terdapat kekurangan kaedah piawai untuk mengakses bekas asas dalam penyesuai ini.

Pelaksanaan Semasa

Dalam beberapa pelaksanaan STL, seperti Visual Microsoft Studio 2008, kaedah bukan standard yang dipanggil _Get_container() tersedia untuk tindanan dan baris gilir. Walau bagaimanapun, tiada kaedah sedemikian wujud untuk priority_queue.

Mengakses Bekas Underlying dalam priority_queue

Walaupun kekurangan kaedah standard, penyelesaian telah dibuat:

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

Kod ini mentakrifkan fungsi pembantu Container() yang menggunakan kelas peribadi bersarang HackedQueue untuk mengakses bekas asas c.

Penggunaan

Dengan ini penyelesaian, anda boleh mengakses bekas asas priority_queue seperti berikut:

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

Dokumentasi Rasmi

Dokumentasi rasmi untuk STL boleh didapati di pautan berikut:

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

Kesimpulan

Walaupun tiada kaedah standard untuk mengakses bekas asas penyesuai kontena STL, penyelesaian yang disediakan menawarkan penyelesaian untuk priority_queue secara khusus. Untuk tindanan dan baris gilir, kaedah _Get_container() bukan standard boleh digunakan jika tersedia.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengakses bekas asas STL priority_queue?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn