1418. 点菜展示表 力扣(中等) map<map>容器不熟练 模拟

题目描述:

给你一个数组 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;
    }
};
原文地址:https://www.cnblogs.com/stepping/p/14979090.html