Junior
priority_queue məlumatlar strukturu nədir?
sobes.tech Süni İntellekt
AI-dan cavab
priority_queue — C++ standart kitabxanasından konteyner adapteri olub, prioritetli növbənin funksionallığını təmin edir. Elementlər prioritetlərinə görə çıxarılır (standart olaraq, ən böyük element ən yüksək prioritetə malikdir). Əsasən, bu, digər konteynerin (standart olaraq std::vector) üzərində qaplanmışdır və yığın algoritmləri (std::make_heap, std::push_heap, std::pop_heap) istifadə edərək əsas konteyner daxilində yığın strukturunu saxlayır.
Əsas xüsusiyyətlər:
- Prioritet: Elementlər prioritetlərinə görə çıxarılır. Standart olaraq,
std::lessistifadə olunur, bu da ən böyük elementin ən yüksək prioritetə malik olduğunu göstərir (maksimum yığın). Sıralama qaydasını dəyişdirmək üçün başqa müqayisəçi, məsələn,std::greater, təmin edə bilərsiniz. - Adapter:
priority_queuemüstəqil konteyner deyil, digər əsas konteynerə (adətənstd::vector, lakinstd::dequedə ola bilər) uyğunlaşdırılır və prioritetli növbə interfeysini təmin edir. - Yığın: Daxili olaraq yığın istifadə edilərək həyata keçirilmişdir, bu da əlavə və çıxarma əməliyyatları üçün logaritmik mürəkkəbliyi təmin edir.
- Qeyri-sıralı giriş: Elementlərə təsadüfi giriş təmin etmir. Yalnız
push,pop(ən yüksək prioritetli elementi çıxarır) vətop(ən yüksək prioritetli elementə baxır) əməliyyatları mövcuddur.
Əsas əməliyyatlar:
| Əməliyyat | Təsviri | Mürəkkəblik (orta/ən pis hal) |
|---|---|---|
push |
Verilmiş prioritetlə element əlavə edir. | O(log N) |
pop |
Ən yüksək prioritetli elementi silir. | O(log N) |
top |
Ən yüksək prioritetli elementə daimi istinad qaytarır. | O(1) |
empty |
Növbənin boş olub-olmadığını yoxlayır. | O(1) |
size |
Növbədəki elementlərin sayını alır. | O(1) |
İstifadə nümunəsi:
#include <queue>
#include <vector>
#include <iostream>
#include <functional> // std::greater üçün
int main() {
// Maksimum yığın (standart)
std::priority_queue<int> max_pq;
max_pq.push(10);
max_pq.push(30);
max_pq.push(20);
std::cout << "Maksimum yığın elementləri (top): ";
while (!max_pq.empty()) {
std::cout << max_pq.top() << " ";
max_pq.pop();
}
std::cout << std::endl;
// Minimum yığın (std::greater<int> istifadə edərək)
std::priority_queue<int, std::vector<int>, std::greater<int>> min_pq;
min_pq.push(10);
min_pq.push(30);
min_pq.push(20);
std::cout << "Minimum yığın elementləri (top): ";
while (!min_pq.empty()) {
std::cout << min_pq.top() << " ";
min_pq.pop();
}
std::cout << std::endl;
return 0;
}