[Buổi 26][Vòng đời & operator][HW] Bài 3: Xếp hạng sản phẩm bằng operator<
Xếp hạng sản phẩm bằng operator<
Bối cảnh
Mỗi Product có id, price, stock. "Giá trị tồn kho" là price*stock. Định nghĩa operator< sao cho khi std::sort tăng dần, sản phẩm có inventoryValue lớn hơn đứng trước; nếu hòa value, stock lớn hơn đứng trước; nếu vẫn hòa, ID nhỏ hơn đứng trước. Sau sort in id value stock.
Bài Medium bắt buộc đặt semantics ranking vào operator<, thay vì viết comparator ngoài, để luyện overload operator như một quan hệ thứ tự tự nhiên do đề quy ước.
Ở B26, constructor/operator/destructor phải được xem như một phần của semantics object chứ không chỉ là cú pháp. Constructor nên đưa object về representation chuẩn ngay từ đầu; operator đọc các object hợp lệ và trả kết quả có cùng invariant; destructor chỉ giải phóng tài nguyên thuộc ownership của chính object.
Ở B26, constructor/operator/destructor phải được xem như một phần của semantics object chứ không chỉ là cú pháp. Constructor nên đưa object về representation chuẩn ngay từ đầu; operator đọc các object hợp lệ và trả kết quả có cùng invariant; destructor chỉ giải phóng tài nguyên thuộc ownership của chính object.
Yêu cầu
- Class Product + constructor.
- Method inventoryValue().
- Overload operator< strict theo 3 tiêu chí.
- Sort vector
.
Input
Dòng 1 n; n dòng id price stock.
Output
n dòng id value stock.
Ràng buộc
1≤n≤5000, price,stock không âm, product vừa long long.
Ví dụ 1
Input
4
P1 10 5
P2 25 2
P3 5 20
P0 10 5
Output
P3 100 20
P0 50 5
P1 50 5
P2 50 2
Giải thích
P3 có value100 nên đứng đầu. P1,P2,P0 đều value50; stock P1/P0=5 lớn hơn P2=2 nên P1/P0 trước P2; tie P0/P1 theo ID khiến P0 trước P1. Thứ tự P3,P0,P1,P2.
Mẫu này đồng thời kiểm tra invariant mà constructor/operator phải giữ. Kết quả không chỉ đúng về giá trị cuối mà còn phải được biểu diễn ở dạng canonical của class; các object nguồn vẫn giữ state riêng nếu phép toán được thiết kế theo value semantics.
Ví dụ 2
Input
1
X 0 0
Output
X 0 0
Giải thích
X value0 stock0 và chỉ một object, output X 0 0.
Mẫu này đồng thời kiểm tra invariant mà constructor/operator phải giữ. Kết quả không chỉ đúng về giá trị cuối mà còn phải được biểu diễn ở dạng canonical của class; các object nguồn vẫn giữ state riêng nếu phép toán được thiết kế theo value semantics.
Thông tin học tập
- Module: M07
- Buổi: B26
- Loại bài: HOMEWORK
- Độ khó: Medium
- Concepts: class, constructor, operator<, sorting, multi-key order
- Giới hạn kiến thức: B01-B26
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments