Chuyển tới nội dung chính

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

  1. 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).
  2. Giảm kích thước: pop() làm giảm kích thước của std::priority_queue đi 1.
  3. 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 tra empty() trước khi gọi pop().
  4. 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.
  5. 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).
  6. 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ằng top() trước khi xóa.
  7. Độ phức tạp: Độ phức tạp của pop()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

pushThêm một phần tử mới vào std::priority_queue
emptyKiểm tra xem std::priority_queue có rỗng hay không