cuốn sách gpt4 ai đã làm

Sự cố sắp xếp khi xuất hiện từ Prior_queue, đây có phải là lỗi của std::priority_queue

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 01:22:00 hai mươi bốn 4
mua khóa gpt4 Nike

#include 
#include
#include
#include

cấu trúc nhiệt độ
{
int p;
std::string str;
};

struct TempCompare
{
toán tử bool()(Nhiệt độ const & a, Nhiệt độ const & b)
{
trả lại ap>bp;
}
};

int chính() {

std::priority_queue, TempCompare> pq;
//Bật và Tắt dòng sau để xem kết quả đầu ra khác
//{Nhiệt độ t;tp=8;t.str="str1";pq.push(t);}
{Nhiệt độ t; tp=8;t.str="str2";pq.push(t);}
{Nhiệt độ t; tp=9;
{Nhiệt độ t; tp=9;

while(!pq.empty())
{
std::cout << pq.top().p << " " << pq.top().str << std::endl;
pq.pop();
}
}

Chạy chương trình trên, bật và tắt dòng thứ tư trong main; kết quả bạn nhận được khi bị tắt là

8 str2
9str1
9 str2

Và khi nó được kích hoạt, bạn sẽ nhận được

8 tầng1
8 str2
9 str2
9str1

Hành vi không nên nhất quán?

câu trả lời hay nhất

KHÔNG. Không có lý do gì để hành vi phải nhất quán. Nhiệt độ{9, "str1"}Nhiệt độ{9,"str2"} Theo chức năng so sánh của bạn, chúng bằng nhau nên chúng được trả về theo bất kỳ thứ tự nào. Việc thêm các phần tử khác nhau vào hàng đợi rất có thể sẽ thay đổi thứ tự.

Nếu bạn muốn chúng được trả về theo thứ tự nhất quán, bạn cần mở rộng chức năng so sánh. Cách đơn giản nhất là

     toán tử bool()(Nhiệt độ const & a, Nhiệt độ const & b)
{
return std::tie(ap,a.str) > std::tie(bp,b.str);
}

Nếu bạn muốn "ở trong P suy giảm nhưng trong str giữa tăng”, bạn phải tự làm điều đó.

Về c++ - Vấn đề về thứ tự khi xuất hiện từ Priority_queue, đây có phải là lỗi của std::priority_queue không, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/45330322/

hai mươi bốn 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress