用C++编写一个商品货栈,保证每一次上货后,日期越近的越靠近货栈里侧
时间: 2024-10-17 20:09:52 浏览: 31
商品货栈管理,通过栈和队列对商品货栈的管理
在C++中创建一个按照入库日期排序的商品货栈,我们可以使用`std::priority_queue`容器,它是标准库中的一个优先队列,内部实现了堆数据结构,可以保证插入元素时始终是最新的日期(在这里理解为最小值)。由于题目要求最近的日期靠近栈底,我们需要自定义一个比较函数作为堆的底层规则。
```cpp
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
// 定义商品结构体,包含日期和价格
struct Product {
std::vector<int> dates; // 假设日期是一个整数数组表示,越大代表日期越新
int price;
};
// 比较函数,用于自定义堆的顺序
bool compare_dates(const Product& a, const Product& b) {
return a.dates.size() > b.dates.size(); // 如果a的日期更多,则认为a更旧
}
class DateOrderedStack {
private:
std::priority_queue<Product, std::vector<Product>, decltype(compare_dates)> pq;
public:
void push(Product product) {
pq.push(product); // 将产品入队,自动保持按日期从新到旧排序
}
Product pop() {
if (pq.empty()) {
throw std::out_of_range("Stack is empty");
}
Product top_product = pq.top();
pq.pop(); // 移除最顶部的元素,即最新的日期商品
return top_product;
}
};
int main() {
DateOrderedStack stack;
stack.push({ {1}, 100 }); // 入库日期为1
stack.push({ {5}, 200 }); // 入库日期为5
Product popped_product;
while (!stack.empty()) {
popped_product = stack.pop();
std::cout << "Popped product with date: " << popped_product.dates[0] << ", price: " << popped_product.price << std::endl;
}
return 0;
}
```
阅读全文