Bagaimanakah saya boleh mengakses bekas asas STL priority_queue?

Mary-Kate Olsen
Lepaskan: 2024-11-01 06:21:02
asal
498 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!