Computer >> Máy Tính >  >> Lập trình >> C ++

Hiển thị Bảng Đơn đặt hàng Thức ăn trong Nhà hàng bằng C ++

Giả sử chúng ta có một đơn đặt hàng mảng, đại diện cho các đơn đặt hàng mà khách hàng đã thực hiện trong một nhà hàng. Vì vậy, các đơn đặt hàng [i] =[cust_namei, table_numi, food_itemi] trong đó cust_namei là tên khách hàng, table_numi là số bàn của khách hàng và food_itemi là mặt hàng mà khách hàng đặt.

Chúng tôi phải trả lại "bàn trưng bày" của nhà hàng. Ở đây “bảng hiển thị” là một bảng có các mục nhập hàng biểu thị số lượng của từng loại thực phẩm mà mỗi bàn đã đặt hàng. Cột đầu tiên sẽ là số thứ tự của bảng và các cột còn lại tương ứng với từng món ăn theo thứ tự bảng chữ cái. Hàng đầu tiên phải là tiêu đề có cột đầu tiên là "Bảng", tiếp theo là tên của các loại thực phẩm.

Vì vậy, nếu đầu vào giống như đơn đặt hàng =[["Amal", "3", "Paratha"], ["Bimal", "10", "Biryni"], ["Amal", "3", "Fried Chicken "], [" Raktim "," 5 "," Nước "], [" Raktim "," 5 "," Paratha "], [" Deepak "," 3 "," Paratha "]], thì đầu ra sẽ be [["Table", "Biryni", "Fried Chicken", "Paratha", "Water"], ["3", "0", "1", "2", "0"], ["5 "," 0 "," 0 "," 1 "," 1 "], [" 10 "," 1 "," 0 "," 0 "," 0 "]]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một bản đồ m

  • Xác định một bộ tên

  • Xác định một bộ t

  • cho mỗi phần tử nó trong danh sách thứ tự

    • chèn nó [1] vào t

    • ok:=true

    • nếu ok là false thì -

      • v =một mảng sau khi tách nó ra [2] bằng cách sử dụng khoảng trống

      • đối với mỗi phần tử x trong v, thực hiện

        • (tăng m [it [1], x] lên 1)

        • chèn x vào tên

    • Nếu không

      • (tăng m [it [1], it [2]] thêm 1)

      • chèn nó [2] vào tên

  • Xác định một mảng 2D ret

  • Xác định tạm thời mảng và sao chép phần tử từ tên

  • chèn "Bảng" làm phần tử đầu tiên vào tạm thời

  • chèn tạm thời vào cuối ret

  • đối với mỗi phần tử nó trong t, thực hiện

    • Xác định một mảng te

    • chèn nó vào cuối te

    • đối với mỗi phần tử x trong tên, thực hiện

      • chèn m [it, x] dưới dạng chuỗi vào cuối te

    • chèn te vào cuối ret

  • sắp xếp lại mảng

  • trả lại ret

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<string> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
typedef long long int lli;
class Solution {
public:
   vector <string> split(string& s, char delimiter){
      vector <string> tokens;
      string token;
      istringstream tokenStream(s);
      while(getline(tokenStream, token, delimiter)){
         tokens.push_back(token);
      }
      return tokens;
   }
   static bool cmp(vector <string>& a, vector <string>& b){
      lli an = stol(a[0]);
      lli bn = stol(b[0]);
      return an < bn;
   }
   vector<vector<string>> displayTable(vector<vector<string>>& o) {
      map <string, map < string, int> >m;
      set <string> names;
      set <string> t;
      for(auto &it : o){
         t.insert(it[1]);
         bool ok = true;
         if(!ok){
            vector <string> v = split(it[2], ' ');
            for(auto& x : v){
               m[it[1]][x]++;
               names.insert(x);
            }
         }
         else{
            m[it[1]][it[2]]++;
            names.insert(it[2]);
         }
      }
      vector < vector <string> > ret;
      vector <string> temp(names.begin(), names.end());
      temp.insert(temp.begin(), "Table");
      ret.push_back(temp);
      for(auto& it : t){
         vector <string> te;
         te.push_back(it);
         for(auto& x : names){
            te.push_back(to_string(m[it][x]));
         }
         ret.push_back(te);
      }
      sort(ret.begin() + 1, ret.end(), cmp);
      return ret;
   }
};
main(){
   Solution ob;
   vector<vector<string>> v = {{"Amal","3","Paratha"},{"Bimal","10","Biryni"},{"Amal","3","Fried
Chicken"},{"Raktim","5","Water"},{"Raktim","5","Paratha"},{"Deepak"," 3","Paratha"}};
   print_vector(ob.displayTable(v));
}

Đầu vào

{{"Amal","3","Paratha"},{"Bimal","10","Biryni"},{"Amal","3","Fried Chicken"},{"Raktim","5","Water"},{"Raktim","5","Paratha"},{"Deepak"," 3","Paratha"}}

Đầu ra

[[Table, Biryni, Fried Chicken, Paratha, Water, ],[3, 0, 1, 2, 0, ],[5, 0, 0, 1, 1, ],[10, 1, 0, 0, 0, ],]