std::priority_queue::pop
#include <queue>
void pop();
Xóa phần tử có độ ưu tiên cao nhất (phần tử ở đỉnh) của std::priority_queue.
Tham số
Không có tham số
Giá trị trả về
Không có giá trị trả về
Đặc điểm
- Xóa phần tử có độ ưu tiên cao nhất:
pop()
luôn xóa phần tử có độ ưu tiên cao nhất (ở đỉnh của std::priority_queue). - Giảm kích thước:
pop()
làm giảm kích thước của std::priority_queue đi 1. - Hành vi không xác định khi queue rỗng: Gọi
pop()
trên một std::priority_queue rỗng sẽ dẫn đến hành vi không xác định (undefined behavior). Bạn nên kiểm traempty()
trước khi gọipop()
. - Dựa trên underlying container và hàm so sánh:
pop()
của std::priority_queue sử dụng các hàm của underlying container (ví dụ:pop_back()
của std::vector sau khi đã hoán đổi phần tử đầu và cuối) và hàm so sánh để duy trì thứ tự ưu tiên. - Không ném ngoại lệ:
pop()
không ném ra bất kỳ ngoại lệ nào (trừ khi destructor của phần tử bị xóa ném ngoại lệ, nhưng trường hợp này rất hiếm). - Không trả về giá trị phần tử bị xóa:
pop()
không trả về giá trị của phần tử bị xóa. Nếu bạn cần giá trị đó, hãy truy cập bằngtop()
trước khi xóa. - Độ phức tạp: Độ phức tạp của
pop()
làO(log n)
, với n là số phần tử trong std::priority_queue. Việc xóa phần tử có độ ưu tiên cao nhất đòi hỏi phải điều chỉnh lại cấu trúc heap của priority_queue.
Ví dụ
#include <iostream>
#include <queue>
int main() {
std::priority_queue<int> mypq;
mypq.push(30);
mypq.push(10);
mypq.push(50);
mypq.push(20);
std::cout << "Popping elements: ";
while (!mypq.empty()) {
std::cout << mypq.top() << " "; // Lấy phần tử có độ ưu tiên cao nhất (không xóa)
mypq.pop(); // Xóa phần tử có độ ưu tiên cao nhất
}
std::cout << '\n'; // Output: Popping elements: 50 30 20 10
return 0;
}
Các hàm liên quan
push | Thêm một phần tử mới vào std::priority_queue |
empty | Kiểm tra xem std::priority_queue có rỗng hay không |