zoukankan      html  css  js  c++  java
  • 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;
        }
    };
  • 相关阅读:
    经典网络命令(搜集、概括)
    浅谈“五万月薪涉足数据恢复行业”
    C语言宏定义技巧(常用宏定义)
    安装IIS5.0出错
    IDM(Internet Download Manager)下载
    tape记忆法
    华为手环更换绑定手机
    冯况 | 清理电脑磁盘
    利用知网查个人信息
    双向循环链表
  • 原文地址:https://www.cnblogs.com/stepping/p/14979090.html
Copyright © 2011-2022 走看看