Đối với std :: priority_queue tôi giả định rằng tham số mẫu đầu tiên được chỉ định loại và tham số thứ hai phải là vùng chứa loại đó. Ví dụ:Việc sử dụng thông số mẫu đầu tiên trong priority_queue
priority_queue<int, vector<int>> someQueue;
Tuy nhiên, đoạn mã sau biên dịch và có vẻ chạy tốt:
class SomeClass
{
};
int main()
{
priority_queue <SomeClass, vector<int>> pq;
int x = 9;
pq.push(x);
int t = pq.top();
cout << t << endl;
pq.pop();
return 0;
}
Sản phẩm mã trên không hợp lệ (ví dụ: cho UB)?
Nếu giá trị hợp lệ - thông số mẫu đầu tiên (ví dụ: someClass
) được sử dụng trong priority_queue là gì.
Tìm tốt. Nó cho phép bạn viết 'priority_queue', tôi cho là vậy. Nó không được sử dụng ở bất cứ nơi nào khác, và tôi không thấy bất kỳ yêu cầu nào về nó trong tiêu chuẩn. –
Nếu bạn thấy, ví dụ: [this 'std :: priority_queue' reference] (http://en.cppreference.com/w/cpp/container/priority_queue) bạn sẽ thấy rằng các kiểu được sử dụng cho dữ liệu được lưu trữ thực sự sử dụng các kiểu từ vùng chứa, chứ không phải đã cung cấp đối số mẫu đầu tiên. Nếu nó được cho là như vậy và những gì các đặc điểm kỹ thuật nói rằng tôi không biết. –
Tham số firsrt là kiểu phần tử trong tham số thứ hai. Vì vậy, tôi nghĩ rằng điều này 'priority_queue> pq;' là sai. xin vui lòng tham khảo: http: //www.cplusplus.com/reference/queue/priority_queue/ –
BlackMamba