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

แสดงตารางออเดอร์อาหารในร้านอาหารใน C++


สมมติว่าเรามีอาร์เรย์ orders แสดงออเดอร์ของลูกค้า orders[i] = [customer_name, table_number, food_item] เราต้องสร้าง "display table" แสดงจำนวนอาหารแต่ละชนิดที่แต่ละโต๊ะสั่ง คอลัมน์แรกเป็นหมายเลขโต๊ะ ตามด้วยชื่ออาหารเรียง A-Z แถวแรกเป็น header

ตัวอย่าง: orders = [["Amal","3","Paratha"],["Bimal","10","Biryni"],...] ผลลัพธ์เป็นตาราง 4x5

วิธีแก้ปัญหา

  1. ใช้ nested map: table → (food → count)
  2. เก็บ set ของชื่ออาหารและหมายเลขโต๊ะ
  3. สร้าง header: "Table" + sorted food names
  4. สร้างแถวข้อมูล: table number + count ของแต่ละอาหาร
  5. เรียงแถวตามหมายเลขโต๊ะตัวเลข

ตัวอย่างโค้ด C++

#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, t; 
        for(auto& it : o){ 
            t.insert(it[1]); 
            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; 
    } 
}; 

int 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, ],]