Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <ctime>
- #include <list>
- #include <unordered_map>
- using namespace std;
- // Define Order structure outside of the OrderStructure class
- struct Order {
- long long orderNumber;
- double rating;
- Order(long long num, double rate) : orderNumber(num), rating(rate) {}
- };
- class OrderStructure {
- private:
- list<Order> orders;
- unordered_map<long long, list<Order>::iterator> orderMap;
- public:
- OrderStructure() = default;
- OrderStructure(const OrderStructure& other) : orders(other.orders), orderMap(other.orderMap) {}
- ~OrderStructure() {}
- void addOrder(long long orderNumber, double rating) {
- Order newOrder(orderNumber, rating);
- if (rating < 0.75) {
- orders.push_back(newOrder);
- }
- else {
- auto it = orders.begin();
- while (it != orders.end() && it->rating >= rating) {
- ++it;
- }
- orders.insert(it, newOrder);
- }
- orderMap[orderNumber] = --orders.end();
- }
- Order removeOrder() {
- if (!orders.empty()) {
- Order removedOrder = orders.front();
- orderMap.erase(removedOrder.orderNumber);
- orders.pop_front();
- return removedOrder;
- }
- else {
- cerr << "Error: Structure is empty, cannot remove order." << endl;
- exit(EXIT_FAILURE);
- }
- }
- bool isEmpty() const {
- return orders.empty();
- }
- void printOrders() const {
- for (const auto& order : orders) {
- cout << "Order Number: " << order.orderNumber << ", Rating: " << order.rating << endl;
- }
- }
- };
- int main() {
- srand(static_cast<unsigned>(time(nullptr)));
- OrderStructure orderStructure;
- for (int i = 0; i < 5; ++i) {
- long long orderNumber = i + 1;
- double rating = static_cast<double>(rand()) / RAND_MAX;
- orderStructure.addOrder(orderNumber, rating);
- }
- cout << "Initial Order List:" << endl;
- orderStructure.printOrders();
- cout << endl;
- while (!orderStructure.isEmpty()) {
- Order removedOrder = orderStructure.removeOrder();
- cout << "Removed Order - Order Number: " << removedOrder.orderNumber
- << ", Rating: " << removedOrder.rating << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement