题目描述:
给你一个数组 orders,表示客户在餐厅中完成的订单,确切地说, orders[i]=[customerNamei,tableNumberi,foodItemi] ,其中 customerNamei 是客户的姓名,tableNumberi 是客户所在餐桌的桌号,而 foodItemi 是客户点的餐品名称。
请你返回该餐厅的 点菜展示表 。在这张表中,表中第一行为标题,其第一列为餐桌桌号 “Table” ,后面每一列都是按字母顺序排列的餐品名称。接下来每一行中的项则表示每张餐桌订购的相应餐品数量,第一列应当填对应的桌号,后面依次填写下单的餐品数量。
注意:客户姓名不是点菜展示表的一部分。此外,表中的数据行应该按餐桌桌号升序排列。
示例 1:
输入:orders = [["David","3","Ceviche"],["Corina","10","Beef Burrito"],["David","3","Fried Chicken"],["Carla","5","Water"],["Carla","5","Ceviche"],["Rous","3","Ceviche"]]
输出:[["Table","Beef Burrito","Ceviche","Fried Chicken","Water"],["3","0","2","1","0"],["5","0","1","0","1"],["10","1","0","0","0"]]
解释:
点菜展示表如下所示:
Table,Beef Burrito,Ceviche,Fried Chicken,Water
3 ,0 ,2 ,1 ,0
5 ,0 ,1 ,0 ,1
10 ,1 ,0 ,0 ,0
对于餐桌 3:David 点了 "Ceviche" 和 "Fried Chicken",而 Rous 点了 "Ceviche"
而餐桌 5:Carla 点了 "Water" 和 "Ceviche"
餐桌 10:Corina 点了 "Beef Burrito"
题源:https://leetcode-cn.com/problems/display-table-of-food-orders-in-a-restaurant/
注意点:
1、如果map容器么有赋值,数据=0
#include "pch.h" #include <iostream> using namespace std; #include<map> int main() { map<int, int> f; f[0] = 1; cout << f[0]<<endl; cout << f[1]; } ———————————— 输出f[1]=0
2、直接定义的vector< vector<int>> s,不能直接用s[0].push_back(),会报错,越界,因为还不存在s[0]
3、对于用auto循环map的变量i,可以用i.second[..]继续选择里面的值
代码:
class Solution { public: vector<vector<string>> displayTable(vector<vector<string>>& orders) { int l=orders.size(); set<string> menu; vector<vector<string>> res; for(int i=0;i<l;i++) menu.insert(orders[i][2]); map<int, map<string,int> > mp; for(int i=0;i<l;i++) { /*int tablenum=stoi(orders[i][1]); if (mp[tablenum].find(orders[i][2]) != mp[tablenum].end() ) mp[tablenum][orders[i][2]]=1; else mp[tablenum][orders[i][2]]++; */ mp[stoi(orders[i][1])][orders[i][2]]++; //虽然没有提前定义,但是可以直接用++,省去了一大步 } //res[0].push_back("Table"); // 这句报错,因为vector不知道有几维,所以直接res[0]错误 //for(auto i : menu) res[0].push_back(i); //改成如下形式才可: vector<string> r; r.push_back("Table"); for(auto i : menu) r.push_back(i); res.push_back(r); int ii=1; for(auto i : mp) { /* res[ii].push_back(to_string(i.first)); for(auto j : i.second) res[ii].push_back(to_string(j.second)); ii++;*/ //这会导致0被省略 vector<string> r; r.push_back(to_string(i.first)); for(auto j : menu) r.push_back(to_string(i.second[j])); //有可能i.second[j]没有存储的记录,会默认0 res.push_back(r); } return res; } };