C++ में कार्य कतारों का परिचय
\n\nकार्य कतार (queue) प्रोग्रामिंग में मूलभूत डेटा संरचनाओं में से एक है, जो FIFO (First In, First Out) सिद्धांत पर काम करती है: पहला जोड़ा गया तत्व पहले निकाला जाएगा। एक सामान्य दुकान की कतार की कल्पना करें - पहला ग्राहक पहले सेवा प्राप्त करता है। C++ में, कतारों के साथ काम करना कंटेनर std::queue के माध्यम से कार्यान्वित किया जाता है, जो स्टैंडर्ड टेम्पलेट लाइब्रेरी (STL) का हिस्सा है।
इस लेख में, हम विस्तार से समझेंगे कि C++ में कार्य कतारों को कैसे बनाया, भरा और संसाधित किया जाए। आप जानेंगे कि कौन सी विधियाँ उपलब्ध हैं, सामान्य गलतियों से कैसे बचें, और मल्टी-थ्रेडेड सिस्टम से लेकर अनुरोध प्रसंस्करण तक, वास्तविक परियोजनाओं में कतारों का उपयोग कैसे किया जाता है।
\n\nकार्य कतार के साथ बुनियादी संचालन
\n\nकतार बनाना और आरंभ करना
\n\nC++ में कतार का उपयोग करने के लिए, हेडर फ़ाइल <queue> को शामिल करना आवश्यक है। मूल कतार इस प्रकार घोषित की जाती है:
#include <iostream>\n#include <queue>\n\nint main() {\n std::queue<int> taskQueue; // पूर्णांकों की कतार\n return 0;\n}\n\nआप किसी भी डेटा प्रकार - स्ट्रिंग, उपयोगकर्ता-परिभाषित संरचनाएं, पॉइंटर्स - के लिए एक कतार बना सकते हैं। उदाहरण के लिए, ऑर्डर प्रोसेसिंग के लिए कार्य कतार:
\n\n#include <queue>\n#include <string>\n\nstruct Order {\n int id;\n std::string description;\n};\n\nint main() {\n std::queue<Order> orderQueue;\n return 0;\n}\n\nतत्वों को जोड़ना और हटाना
\n\nकतार के साथ काम करने के लिए मुख्य विधियाँ:
\n\n- \n
push()— कतार के अंत में एक तत्व जोड़ता है \n pop()— कतार से पहला तत्व हटाता है \n front()— पहले तत्व का संदर्भ लौटाता है (बिना हटाए) \n back()— अंतिम तत्व का संदर्भ लौटाता है \n empty()— जाँचता है कि कतार खाली है या नहीं \n size()— तत्वों की संख्या लौटाता है \n
कार्यों के चरण-दर-चरण प्रसंस्करण के साथ एक उदाहरण देखें:
\n\n#include <iostream>\n#include <queue>\n\nint main() {\n std::queue<std::string> tasks;\n\n // कार्य जोड़ें\n tasks.push("कार्य 1: ईमेल जांचें");\n tasks.push("कार्य 2: रिपोर्ट लिखें");\n tasks.push("कार्य 3: बैठक आयोजित करें");\n\n std::cout << "पहला कार्य: " << tasks.front() << std::endl;\n std::cout << "अंतिम कार्य: " << tasks.back() << std::endl;\n std::cout << "कुल कार्य: " << tasks.size() << std::endl;\n\n // कार्यों को क्रम से संसाधित करें\n while (!tasks.empty()) {\n std::cout << "निष्पादित कर रहा हूँ: " << tasks.front() << std::endl;\n tasks.pop(); // निष्पादित कार्य को हटाएं\n }\n\n std::cout << "सभी कार्य पूर्ण हो गए!" << std::endl;\n return 0;\n}\n\nनिष्पादन परिणाम:
\nपहला कार्य: कार्य 1: ईमेल जांचें\nअंतिम कार्य: कार्य 3: बैठक आयोजित करें\nकुल कार्य: 3\nनिष्पादित कर रहा हूँ: कार्य 1: ईमेल जांचें\nनिष्पादित कर रहा हूँ: कार्य 2: रिपोर्ट लिखें\nनिष्पादित कर रहा हूँ: कार्य 3: बैठक आयोजित करें\nसभी कार्य पूर्ण हो गए!\n\nप्राथमिकता कतारें: जब क्रम महत्वपूर्ण हो
\n\nकभी-कभी कार्यों की अलग-अलग प्राथमिकताएँ होती हैं। उदाहरण के लिए, एक गंभीर त्रुटि को नियोजित अपडेट से पहले संसाधित किया जाना चाहिए। ऐसे मामलों में, std::priority_queue का उपयोग किया जाता है, जो स्वचालित रूप से तत्वों को प्राथमिकता के अनुसार क्रमबद्ध करता है।
#include <iostream>\n#include <queue>\n#include <vector>\n\nint main() {\n // डिफ़ॉल्ट रूप से - सबसे बड़े तत्व की उच्चतम प्राथमिकता\n std::priority_queue<int> highPriorityTasks;\n\n highPriorityTasks.push(5); // सामान्य कार्य\n highPriorityTasks.push(10); // तत्काल कार्य\n highPriorityTasks.push(1); // निम्न प्राथमिकता\n\n while (!highPri