2011-10-18 24 views
5

Tôi đã tự hỏi khi C++ STL priority_queue sắp xếp chính nó. Tôi có nghĩa là nó insert nó vào một vị trí chính xác khi bạn push các mục trong, hoặc nó tự sắp xếp và cung cấp cho bạn các mục ưu tiên cao nhất khi bạn peek hoặc pop nó ra? Tôi đang yêu cầu điều này bởi vì priority_queue<int> của tôi sẽ chứa một chỉ mục cho một mảng có thể có cập nhật giá trị và tôi muốn nó cập nhật khi tôi thực hiện pq.top();.Khi nào một tiêu chuẩn :: priority_queue <> tự sắp xếp?

#include <cstdio> 
#include <algorithm> 
#include <queue> 
using namespace std; 

int main() { 
    priority_queue<int> pq; 
    pq.push(2); 
    pq.push(5); //is the first element 5 now? or will it update again when I top() or pop() it out? 
    return 0; 
} 

Cảm ơn.

+0

Bạn có thể khám phá những thuộc tính này dễ dàng, vì như 'map', nó cần một biến vị ngữ so sánh. Nếu bạn cung cấp một vị từ so sánh in ra bàn điều khiển (ví dụ) tại mỗi lần so sánh, bạn sẽ chứng kiến ​​trực tiếp khi nó được gọi (và trên các giá trị nào). –

Trả lời

10

Công việc được thực hiện trong push()pop(), gọi hàm sửa đổi heap cơ bản (push_heap()pop_heap()). top() mất thời gian không đổi.

+0

Tuyệt vời, đó là chính xác những gì tôi muốn nghe. Tôi sẽ đánh dấu phần này là câu trả lời khi giới hạn thời gian biến mất. –

+1

Ví dụ [tại đây] (http://www.sgi.com/tech/stl/priority_queue.html) thể hiện hành vi thực sự tốt –

+0

@StanleyCen: Rất vui khi tôi có thể trợ giúp, mặc dù tôi thực sự đã bỏ sót thông tin đó [một số trang web ] (http://www.cplusplus.com/reference/stl/priority_queue/pop/) ... –

1

Nó tự sắp xếp khi một phần tử mới được chèn vào hoặc phần tử hiện có được xóa. This might help.

Các vấn đề liên quan