Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी++ में एक रेस्तरां में खाद्य आदेशों की तालिका प्रदर्शित करें

मान लीजिए कि हमारे पास एक सरणी ऑर्डर है, जो ग्राहकों द्वारा एक रेस्तरां में किए गए ऑर्डर का प्रतिनिधित्व करता है। तो, ऑर्डर [i] =[cust_namei, table_numi, food_itemi] जहां cust_namei ग्राहक का नाम है, table_numi ग्राहक तालिका संख्या है, और food_itemi आइटम ग्राहक ऑर्डर है।

हमें रेस्टोरेंट का “डिस्प्ले टेबल” वापस करना होगा। यहां "डिस्प्ले टेबल" एक टेबल है जिसकी पंक्ति प्रविष्टियां दर्शाती हैं कि प्रत्येक टेबल में प्रत्येक खाद्य पदार्थ में से कितने ऑर्डर किए गए हैं। पहला कॉलम टेबल नंबर होगा और शेष कॉलम वर्णानुक्रम में प्रत्येक खाद्य पदार्थ के अनुरूप होंगे। पहली पंक्ति में एक हेडर होना चाहिए जिसका पहला कॉलम "टेबल" हो, उसके बाद खाद्य पदार्थों के नाम हों।

तो, अगर इनपुट ऑर्डर की तरह है =[["अमल", "3", "पराठा"], ["बिमल", "10", "बिरनी"], ["अमल", "3", "फ्राइड चिकन "], ["रकतिम", "5", "पानी"], ["रक्तिम", "5", "पराठा"], ["दीपक", "3", "पराठा"]], तो आउटपुट होगा [["टेबल", "बिरनी", "फ्राइड चिकन", "पराठा", "पानी"], ["3", "0", "1", "2", "0"], ["5 ","0", "0", "1", "1"], ["10", "1", "0", "0", "0"]]

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक नक्शा परिभाषित करें मी

  • एक सेट नाम परिभाषित करें

  • एक सेट टी परिभाषित करें

  • प्रत्येक तत्व के लिए यह क्रम सूची में है

    • इसे [1] टी में डालें

    • ठीक :=सच

    • अगर ठीक गलत है, तो -

      • v =एक सरणी को विभाजित करने के बाद [2] रिक्त स्थान का उपयोग करके

      • v में प्रत्येक तत्व x के लिए, करें

        • (एम [इसे [1], x] 1 से बढ़ाएँ)

        • नामों में x डालें

    • अन्यथा

      • (एम [इसे [1], इसे [2]] 1 से बढ़ाएं)

      • इसे [2] नामों में डालें

  • एक 2डी सरणी रेट परिभाषित करें

  • एक सरणी अस्थायी परिभाषित करें और नामों से तत्व कॉपी करें

  • अस्थायी में पहले तत्व के रूप में "तालिका" डालें

  • रिट के अंत में अस्थायी डालें

  • प्रत्येक तत्व के लिए इसे t में करें

    • एक सरणी ते परिभाषित करें

    • इसे ते के अंत में डालें

    • नामों में प्रत्येक तत्व x के लिए, करें

      • ते के अंत में m[it, x] स्ट्रिंग के रूप में डालें

    • रिट के अंत में ते डालें

  • सरणी को क्रमबद्ध करें रिट

  • वापसी रिट

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#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, ],]

  1. सी ++ में एक वेक्टर को सॉर्ट करना

    सी ++ में वेक्टर को सॉर्ट करना std ::सॉर्ट() का उपयोग करके किया जा सकता है। इसे हेडर में परिभाषित किया गया है। एक स्थिर प्रकार प्राप्त करने के लिए std::stable_sort का उपयोग किया जाता है। यह बिल्कुल सॉर्ट () जैसा है लेकिन समान तत्वों के सापेक्ष क्रम को बनाए रखता है। आवश्यकता के अनुसार क्विकसॉर्ट (),

  1. सी ++ में एक स्ट्रिंग को टोकन करना

    इस खंड में, हम देखेंगे कि C++ में स्ट्रिंग्स को कैसे टोकननाइज़ किया जाता है। सी में हम वर्ण सरणी के लिए strtok() फ़ंक्शन का उपयोग कर सकते हैं। यहां हमारे पास एक स्ट्रिंग क्लास है। अब हम देखेंगे कि उस स्ट्रिंग से कुछ सीमांकक का उपयोग करके स्ट्रिंग को कैसे काटा जाता है। C++ फीचर का उपयोग करने के लिए,

  1. सी ++ में एक स्ट्रिंग को टोकननाइज़ करें?

    पहला तरीका है, रिक्त स्थान से अलग किए गए शब्दों को पढ़ने के लिए एक स्ट्रिंगस्ट्रीम का उपयोग करना। यह थोड़ा सीमित है लेकिन यदि आप उचित जांच प्रदान करते हैं तो यह कार्य काफी अच्छी तरह से करता है। उदाहरण #include <vector> #include <string> #include <sstream> using namespace std; in