Push phần tử là 1 struct vào priority_queue

Em có khai báo struct và 1 priority_queue như sau

int start;
//....
struct point{
       int cost;
      int vertex;
      int fuel
}
//...
priority_queue<point, vector<point>, greater<point> > pq;

Mọi người cho em hỏi là em muốn push 3 số (0,start,0) vào pq thì viết như sau có đúng ko ạ

pq.push(point(0,start,0));

Nếu ko thì làm tn ạ?

hàng đợi ưu tiên nó khác hàng đợi ở chỗ nó được sắp xếp theo thứ tự nhất định, mỗi lấn push nó tiến hành tìm kiếm np để nhét vào, đương nhiên nó cấn phải so sánh rồi, do kiểu dữ liệu trong pq của em là struct lên em cần định nghĩa lại toán tử so sánh mà cụ thể ở đây với greater<> thì là phép toán >
VD

bool operator>(point a,point b)
{
	return a.cost>b.cost;
}

với việc định ngĩa lại như thế thì pq.top() là pt có cost nhỏ nhất

Thế thì đoạn struct viết thế này ạ anh

struct point{
	int cost,vertex,fuel;
	bool operator>(point a,point b)
	{
	return a.cost>b.cost;
	}
} ;

việc định nghĩa lại toán tử > đưa ra ngoài như 1 hàm bình thường ấy, trong hàm này ta có thể so sánh 2 struct theo bất kì trường dữ liệu nào ta muốn
http://ideone.com/zGQhki mình test thử thì thấy oke

Oh cảm ơn anh ạ :smiley:

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