Hỏi về ý nghĩa code khai báo priority_queue

Cho em hỏi source code khai báo thế này nghĩa là ntn ạ?

priority_queue< ii, vector<ii>, greater<ii> > pq;

với

typedef pair<int, int> ii;

typedef pair<int, int> ii;
nghĩa là khai báo kiểu ii là kiểu pair<int,int> hay ii là 1 cặp số nguyên (int int)

priority_queue< ii, vector<ii>, greater<ii> > pq;
là khai báo biến pq là hàng đợi theo thứ tự từ lớn tới nhỏ (greater<ii>). Bình thường chỉ cần khai báo priority_queue<ii> minPQ; nghĩa là minPQ là hàng đợi chứa các cặp số nguyên từ nhỏ tới lớn. Mặc định của priority_queue là phần tử nhỏ nhất ra trước. Muốn đổi thành cặp số lớn ra trước thì phải thêm hàm so sánh vào, nhưng ngặt nỗi là vị trí của hàm so sánh ở vị trí thứ 3 nên phải thêm kiểu thùng chứa vector<ii> vào vị trí thú 2 nữa

priority_queue< kiểu T, kiểu thùng chứa, hàm so sánh >
trong đó kiểu thùng chứa mặc định là vector<T>, hàm so sánh mặc định là less<T> nghĩa là bé nhất ra trước

pair<U,V> có cho phép so sánh theo thứ tự trước sau, so sánh phần tử thứ nhất trước, nếu bằng nhau thì so sánh phần tử tiếp theo. Ví dụ pair<int,int>1,2 sẽ bé hơn 2,21,3, pair<string,int> thì abc,1 bé hơn abd,1abc,2.

2 Likes

Em cảm ơn ạ :smiley: anh giải thích dễ hiểu thật

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?