使用 C++ 显示餐厅的食品订单表
假设我们有一个数组 orders,它表示顾客在餐厅的订单。因此,orders[i]=[cust_namei, table_numi, food_itemi],其中 cust_namei 是顾客姓名,table_numi 是顾客桌号,food_itemi 是顾客订购的商品。
我们必须返回餐厅的"显示表"。这里的"显示表"是一个表,其行条目表示每张桌子订购了多少种食品。第一列是桌号,其余列按字母顺序对应于每种食品。第一行应该是一个标题,其第一列是"表格",后面是食物的名称。
因此,如果输入如下 order = [["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
定义一个集合 names
定义一个集合 t
对每个元素 it 进行排序列表
将 it[1] 插入 t
ok := true
如果 ok 为 false,则 −
v = 使用空格拆分 it[2] 后的数组
对 v 中的每个元素 x,执行
(将 m[it[1], x] 增加 1)
将 x 插入 names
否则
(将 m[it[1], it[2]] 增加 1)
将 it[2] 插入到 names 中
定义一个二维数组 ret
定义一个数组 temp 并从 names 中复制元素
插入"表格"作为第一个元素放入 temp 中
在 ret 末尾插入 temp
对 t 中的每个元素 it 执行
定义一个数组 te
在 te 末尾插入 it
对 names 中的每个元素 x 执行
在 te 末尾插入 m[it, x] 作为字符串
在 ret 末尾插入 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, ],]