c++用队列模拟银行叫号系统且有vip队列
时间: 2023-11-05 13:10:37 浏览: 166
好的,以下是使用C++实现队列模拟银行叫号系统并且有VIP队列的示例代码:
```c++
#include <iostream>
#include <queue>
using namespace std;
// 定义顾客结构体
struct Customer {
int number;
bool is_vip;
};
// 定义比较器,用于将VIP顾客插入到队列的最前面
struct Compare {
bool operator() (const Customer& c1, const Customer& c2) {
if (c1.is_vip != c2.is_vip) {
return c1.is_vip > c2.is_vip;
} else {
return c1.number > c2.number;
}
}
};
class Bank {
public:
Bank() {
customer_number = 0;
}
// 新增一个顾客
void new_customer(bool is_vip) {
Customer customer = {++customer_number, is_vip};
if (is_vip) {
vip_queue.push(customer);
} else {
normal_queue.push(customer);
}
}
// 叫下一个顾客
void serve_customer() {
if (!vip_queue.empty()) {
Customer customer = vip_queue.front();
vip_queue.pop();
cout << "Now serving customer " << customer.number << " (VIP)" << endl;
} else if (!normal_queue.empty()) {
Customer customer = normal_queue.front();
normal_queue.pop();
cout << "Now serving customer " << customer.number << endl;
} else {
cout << "No customers to serve." << endl;
}
}
// 输出当前队列中的顾客号码
void show_queue() {
cout << "VIP queue: ";
queue<Customer> temp_queue = vip_queue;
while (!temp_queue.empty()) {
cout << temp_queue.front().number << " ";
temp_queue.pop();
}
cout << endl;
cout << "Normal queue: ";
temp_queue = normal_queue;
while (!temp_queue.empty()) {
cout << temp_queue.front().number << " ";
temp_queue.pop();
}
cout << endl;
}
private:
int customer_number;
priority_queue<Customer, vector<Customer>, Compare> vip_queue;
queue<Customer> normal_queue;
};
// 示例代码
int main() {
Bank bank;
bank.new_customer(false);
bank.new_customer(true);
bank.new_customer(false);
bank.show_queue();
bank.serve_customer();
bank.show_queue();
bank.serve_customer();
bank.serve_customer();
bank.serve_customer();
bank.show_queue();
return 0;
}
```
在这个示例代码中,我们首先定义了一个顾客结构体,包含一个顾客号码和一个是否是VIP顾客的标记。然后我们定义了一个比较器Compare,用于将VIP顾客插入到队列的最前面。接着我们实现了一个Bank类来模拟银行,其中包含了三个方法:
- new_customer:每次调用这个方法时,会为新的顾客生成一个号码,并将其加入到VIP队列或普通队列的末尾。
- serve_customer:每次调用这个方法时,会将队列中的下一个顾客叫到柜台处理。如果VIP队列非空,则优先叫VIP队列中的顾客;否则叫普通队列中的顾客。如果队列为空,则输出“No customers to serve.”的提示信息。
- show_queue:每次调用这个方法时,会输出当前VIP队列和普通队列中的顾客号码。
在示例代码的最后,我们创建了一个Bank对象,并调用了几个方法来测试它们的功能。您可以根据自己的需要修改代码来满足您的需求。
阅读全文