Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

แสดงตารางการสั่งอาหารในร้านอาหารในภาษา C++


สมมติว่าเรามีคำสั่งซื้อแบบอาร์เรย์ ซึ่งแสดงถึงคำสั่งซื้อที่ลูกค้าทำในร้านอาหาร ดังนั้น orders[i]=[cust_namei, table_numi, food_itemi] โดยที่ cust_namei คือชื่อลูกค้า table_numi คือหมายเลขโต๊ะของลูกค้า และ food_itemi คือรายการสินค้าที่ลูกค้าสั่ง

เราต้องคืน "โต๊ะแสดง" ของร้านอาหาร ในที่นี้ “โต๊ะแสดงผล” คือตารางที่มีรายการอาหารในแถวที่ระบุว่าแต่ละโต๊ะสั่งอาหารกี่รายการ คอลัมน์แรกจะเป็นหมายเลขตาราง และคอลัมน์ที่เหลือจะสอดคล้องกับรายการอาหารแต่ละรายการตามลำดับตัวอักษร แถวแรกควรเป็นส่วนหัวที่มีคอลัมน์แรกคือ "ตาราง" ตามด้วยชื่ออาหาร

ดังนั้น หากอินพุตเป็นเหมือนคำสั่ง =[["Amal","3","Paratha"],["Bimal","10","Biryni"],["Amal","3","Fried Chicken "],["Raktim","5","Water"],["Raktim","5","Paratha"],["Deepak","3","Paratha"]] แล้วผลลัพธ์จะ เป็น [["Table","Biryni","Fried Chicken","Paratha","Water"],["3","0","1","2","0"],["5 ","0","0","1","1"],["10","1","0","0","0"]]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดหนึ่งแผนที่ m

  • กำหนดชื่อชุดหนึ่งชุด

  • กำหนดหนึ่งชุด t

  • สำหรับแต่ละองค์ประกอบตามลำดับรายการ

    • ใส่[1] ลงใน t

    • โอเค :=จริง

    • ถ้าตกลงเป็นเท็จ −

      • v =อาร์เรย์หลังจากแยกมัน[2]โดยใช้ช่องว่าง

      • สำหรับแต่ละองค์ประกอบ x ใน v ทำ

        • (เพิ่ม m[it[1], x] ขึ้น 1)

        • ใส่ x ลงในชื่อ

    • มิฉะนั้น

      • (เพิ่ม m[it[1], it[2]] โดย 1)

      • ใส่[2]ลงในชื่อ

  • กำหนดอาร์เรย์ 2D ret หนึ่งรายการ

  • กำหนดอาร์เรย์ชั่วคราวและคัดลอกองค์ประกอบจากชื่อ

  • แทรก "Table" เป็นองค์ประกอบแรกใน temp

  • ใส่ temp ที่ท้าย ret

  • สำหรับแต่ละองค์ประกอบใน t ทำ

    • กำหนดอาร์เรย์ te

    • ใส่ที่ส่วนท้ายของ te

    • สำหรับแต่ละองค์ประกอบ x ในชื่อ ทำ

      • แทรก m[it, x] เป็นสตริงที่ส่วนท้ายของ te

    • ใส่ te ที่ส่วนท้ายของ ret

  • จัดเรียงอาร์เรย์ ret

  • รีเทิร์น

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#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));
}

อินพุต

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

ผลลัพธ์

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