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;
- struct Order {
- long long orderNumber;
- double rating;
- //Constructor
- 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 removeOrder = orders.front();
- orderMap.erase(removeOrder.orderNumber);
- orders.pop_front();
- return removeOrder;
- }
- else {
- cerr << "Error, structure is empty" << 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;
- cout << endl;
- }
- }
- };
- int main() {
- srand(static_cast<unsigned>(time(nullptr)));
- OrderStructure orderStructure;
- // adding rand orders
- for (int i = 0; i < 7; ++i) {
- long long orderNumber = i + 1000;
- double rating = static_cast<double>(rand()) / RAND_MAX;
- orderStructure.addOrder(orderNumber, rating);
- }
- cout << "Order List: " << endl;
- orderStructure.printOrders();
- cout << endl;
- //removing and printing until the struct is empty
- while (!orderStructure.isEmpty()) {
- Order removeOrder = orderStructure.removeOrder();
- cout << "Removed " << removeOrder.orderNumber << " Rating: " << removeOrder.rating << endl;
- cout << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement