class Solution {
public:
vector<vector<string>> displayTable(vector<vector<string>>& orders) {
unordered_map<int, map<string, int>> tblFoodCnt;
unordered_set<string> nameSet;
vector<string> nameList;
for (auto &order : orders) {
int tblId = stoi(order[1]);
++tblFoodCnt[tblId][order[2]];
nameSet.insert(order[2]);
}
for (auto &name : nameSet) {
nameList.push_back(name);
}
sort(nameList.begin(), nameList.end());
vector<int> ids;
for (auto &[id, _] : tblFoodCnt) {
ids.push_back(id);
}
sort(ids.begin(), ids.end());
int m = tblFoodCnt.size();
int n = nameList.size();
vector<vector<string>> table(m + 1, vector<string>(n + 1));
table[0][0] = "Table";
copy(nameList.begin(), nameList.end(), table[0].begin() + 1);
for (int i = 0; i < m; i++) {
int id = ids[i];
auto &cnt = tblFoodCnt[id];
table[i + 1][0] = to_string(id);
for (int j = 0; j < n; j++) {
table[i + 1][j + 1] = to_string(cnt[nameList[j]]);
}
}
return table;
}
};