Sobes.tech
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::less istifadə 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_queue müstəqil konteyner deyil, digər əsas konteynerə (adətən std::vector, lakin std::deque də 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;
}