Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh mengakses bekas asas 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& 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>
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:
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!