Junior
priority_queue ma'lumotlar tuzilmasi nima?
sobes.tech AI
AIdan javob
priority_queue — C++ standarta kutubxonasidan konteyner adaptori bo‘lib, ustunlik navbatining funksiyasini taqdim etadi. Elementlar ustunlik bo‘yicha chiqariladi (standart holatda, eng katta element eng yuqori ustunlikka ega). Asosan, bu boshqa konteyner (standart holatda std::vector) ustiga qoplangan bo‘lib, std::make_heap, std::push_heap, std::pop_heap algoritmlari yordamida asosiy konteyner ichida yigin tuzilmasini saqlaydi.
Asosiy xususiyatlar:
- Ustunlik: Elementlar ularning ustunligiga ko‘ra chiqariladi. Standart holatda,
std::lessishlatiladi, bu eng katta element eng yuqori ustunlikka ega bo‘lishini anglatadi (maksimal yigin). Tartibni o‘zgartirish uchun boshqa solishtiruvchini, masalan,std::greaterni taqdim etish mumkin. - Adaptori:
priority_queuemustaqil konteyner emas, balki boshqa asosiy konteynerga (odatdastd::vector, lekinstd::dequeham bo‘lishi mumkin) moslashtirilgan va ustunlik navbati interfeysini taqdim etadi. - Yigin: Ichki ravishda yigin yordamida amalga oshirilgan, bu qo‘shish va chiqarish operatsiyalarining logarifmik murakkabligini ta’minlaydi.
- Noto‘g‘ri kirish: Elementlarga tasodifiy kirishni ta’minlamaydi. Faqat qo‘shish (
push), eng yuqori ustunlikdagi elementni chiqarish (pop) va eng yuqori ustunlikdagi elementga qarash (top) operatsiyalari mavjud.
Asosiy operatsiyalar:
| Operatsiya | Tavsifi | Murakkablik (o‘rtacha/eng yomon holatda) |
|---|---|---|
push |
Belgilangan ustunlik bilan element qo‘shadi. | O(log N) |
pop |
Eng yuqori ustunlikdagi elementni olib tashlaydi. | O(log N) |
top |
Eng yuqori ustunlikdagi elementga doimiy havola qaytaradi. | O(1) |
empty |
Navbat bo‘sh yoki yo‘qligini tekshiradi. | O(1) |
size |
Navbatdagi elementlar sonini oladi. | O(1) |
Misol:
#include <queue>
#include <vector>
#include <iostream>
#include <functional> // std::greater uchun
int main() {
// Maksimal yigin (standart)
std::priority_queue<int> max_pq;
max_pq.push(10);
max_pq.push(30);
max_pq.push(20);
std::cout << "Maksimal yigin elementlari (top): ";
while (!max_pq.empty()) {
std::cout << max_pq.top() << " ";
max_pq.pop();
}
std::cout << std::endl;
// Minimal yigin (std::greater<int> yordamida)
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 << "Minimal yigin elementlari (top): ";
while (!min_pq.empty()) {
std::cout << min_pq.top() << " ";
min_pq.pop();
}
std::cout << std::endl;
return 0;
}