在 C++ 中显示餐馆的食品订单表
假设我们有一个数组 orders,它代表顾客在餐厅下的订单。因此,orders[i]=[cust_namei, table_numi, food_itemi],其中 cust_namei 是顾客姓名,table_numi 是顾客的桌号,food_itemi 是顾客订购的菜品。
我们必须返回餐厅的“显示表”。这里的“显示表”是一个表格,其行条目表示每张桌子订购了多少种食品。第一列将是桌号,其余列对应于按字母顺序排列的每种食品。第一行应该是标题,其第一列为“桌子”,后跟食品名称。
因此,如果输入类似于 orders = [["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 中复制元素
将 "Table" 作为第一个元素插入到 temp 中
将 temp 插入到 ret 的末尾
对于 t 中的每个元素 it,执行:
定义一个数组 te
将 it 插入到 te 的末尾
对于 names 中的每个元素 x,执行:
将 m[it, x] 作为字符串插入到 te 的末尾
将 te 插入到 ret 的末尾
对数组 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, ],]
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP