30/09/2018, 19:27

Hỏi về code trong C ạ

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 ạ?

Khôi Trần viết 21:31 ngày 30/09/2018

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

Thanh Dang viết 21:41 ngày 30/09/2018

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;
	}
} ;
Khôi Trần viết 21:33 ngày 30/09/2018

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

Thanh Dang viết 21:41 ngày 30/09/2018

Oh cảm ơn anh ạ

Bài liên quan
0