कस्टम तुलनाकर्ता
क्रम नियंत्रित करें
कस्टम तुलनाकर्ता, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
स्वनिर्मित तुलनाकर्ता क्यों?
डिफ़ॉल्ट रूप से, क्रमबद्ध कंटेनर std::less का उपयोग करके आरोही क्रम में सजते हैं। स्वनिर्मित तुलनाकर्ता से आप यह क्रम बदल सकते हैं, जैसे अवरोही क्रम में या किसी विशेष फ़ील्ड के आधार पर।
#include <iostream>
#include <set>
int main() {
std::set<int> ascending{3, 1, 2};
for (int x : ascending) std::cout << x << ' ';
std::cout << '\n';
return 0;
}std::greater से अवरोही क्रम
सबसे सरल स्वनिर्मित तुलनाकर्ता मानक फ़ंक्टर std::greater है, जो अवरोही क्रम में सजाता है।
#include <iostream>
#include <set>
#include <functional>
int main() {
std::set<int, std::greater<int>> s{3, 1, 2};
for (int x : s) std::cout << x << ' ';
std::cout << '\n';
return 0;
}मैप पर तुलनाकर्ता
तुलनाकर्ता std::map का तीसरा टेम्पलेट पैरामीटर होता है। यहाँ कुंजियाँ बड़ी से छोटी के क्रम में सजती हैं।
#include <iostream>
#include <map>
#include <functional>
int main() {
std::map<int, std::string, std::greater<int>> m{
{1, "one"}, {3, "three"}, {2, "two"}
};
for (const auto& [k, v] : m) std::cout << k << ':' << v << ' ';
std::cout << '\n';
return 0;
}तुलनाकर्ता कैसे काम करते हैं
तुलनाकर्ता ऐसा कॉल करने योग्य घटक है जो दो तर्क लेता है और यदि पहला, दूसरे से पहले आना चाहिए तो true लौटाता है। इसे सख्त कमजोर क्रम परिभाषित करना आवश्यक है।
#include <iostream>
struct Less {
bool operator()(int a, int b) const { return a < b; }
};
int main() {
Less cmp;
std::cout << std::boolalpha << cmp(2, 5) << '\n';
std::cout << cmp(5, 2) << '\n';
return 0;
}स्वनिर्मित संरचना तुलनाकर्ता
अपनी फ़ंक्टर संरचना को operator() के साथ परिभाषित करें और उसके प्रकार को तुलनाकर्ता के रूप में दें।
#include <iostream>
#include <set>
struct ByAbs {
bool operator()(int a, int b) const {
return (a < 0 ? -a : a) < (b < 0 ? -b : b);
}
};
int main() {
std::set<int, ByAbs> s{-5, 3, -1, 4};
for (int x : s) std::cout << x << ' ';
std::cout << '\n';
return 0;
}स्ट्रिंग को लंबाई के आधार पर सजाना
तुलनाकर्ता किसी भी गुण की तुलना कर सकते हैं। यहाँ स्ट्रिंग पहले लंबाई के आधार पर और फिर बराबरी की स्थिति में वर्णक्रम के आधार पर सजती हैं।
#include <iostream>
#include <set>
#include <string>
struct ByLen {
bool operator()(const std::string& a, const std::string& b) const {
if (a.size() != b.size()) return a.size() < b.size();
return a < b;
}
};
int main() {
std::set<std::string, ByLen> s{"bbb", "a", "cc", "dd"};
for (const auto& x : s) std::cout << x << ' ';
std::cout << '\n';
return 0;
}बराबरी तय करने वाली तुलना क्यों ज़रूरी है
यदि आपका तुलनाकर्ता कहता है कि कोई भी तत्व दूसरे से पहले नहीं आता, तो कंटेनर उन्हें समान मानता है। set में इसका अर्थ है कि एक तत्व को दोहराव मानकर हटा दिया जाएगा।
#include <iostream>
#include <set>
#include <string>
struct LenOnly {
bool operator()(const std::string& a, const std::string& b) const {
return a.size() < b.size();
}
};
int main() {
std::set<std::string, LenOnly> s{"ab", "cd", "x"};
std::cout << s.size() << " elements\n";
return 0;
}तुलनाकर्ताओं के रूप में लैम्ब्डा
आप decltype के माध्यम से लैम्ब्डा का प्रकार और स्वयं लैम्ब्डा को कंस्ट्रक्टर में देकर उसका उपयोग कर सकते हैं।
#include <iostream>
#include <set>
int main() {
auto cmp = [](int a, int b) { return a > b; };
std::set<int, decltype(cmp)> s(cmp);
s.insert(1);
s.insert(3);
s.insert(2);
for (int x : s) std::cout << x << ' ';
std::cout << '\n';
return 0;
}priority_queue में तुलनाकर्ता
तुलनाकर्ता std::priority_queue को भी व्यवस्थित करते हैं। std::greater के साथ यह न्यूनतम-हीप बन जाता है।
#include <iostream>
#include <queue>
#include <vector>
#include <functional>
int main() {
std::priority_queue<int, std::vector<int>, std::greater<int>> pq;
pq.push(5); pq.push(1); pq.push(3);
while (!pq.empty()) { std::cout << pq.top() << ' '; pq.pop(); }
std::cout << '\n';
return 0;
}युग्मों की तुलना
युग्मों के किसी समुच्चय को दूसरे तत्व के आधार पर सजाने के लिए ऐसा तुलनाकर्ता लिखें जो .second की जाँच करे।
#include <iostream>
#include <set>
#include <utility>
struct BySecond {
bool operator()(const std::pair<int,int>& a, const std::pair<int,int>& b) const {
return a.second < b.second;
}
};
int main() {
std::set<std::pair<int,int>, BySecond> s{{1, 9}, {2, 3}, {3, 6}};
for (const auto& p : s) std::cout << p.first << ':' << p.second << ' ';
std::cout << '\n';
return 0;
}पारदर्शी तुलनाकर्ता
std::less<> का उपयोग करने से (खाली कोणीय कोष्ठकों के साथ) C++14 में विषम प्रकारों वाली खोज संभव होती है और अस्थायी कुंजी में बदलने की आवश्यकता नहीं रहती।
#include <iostream>
#include <set>
#include <functional>
int main() {
std::set<int, std::less<>> s{1, 2, 3};
std::cout << (s.find(2) != s.end() ? "found" : "no") << '\n';
return 0;
}त्वरित जाँच
तुलनाकर्ता किस तरह समानता निर्धारित करते हैं, इसकी अपनी समझ जाँचें।
पुनरावलोकन
आपने सीखा कि स्वनिर्मित तुलनाकर्ता:
- कंटेनर के तुलनाकर्ता टेम्पलेट पैरामीटर के माध्यम से क्रम बदल सकते हैं
std::greater, फ़ंक्टर संरचना याdecltypeके माध्यम से लैम्ब्डा हो सकते हैं- समतुल्यता के आधार पर समानता निर्धारित करते हैं, इसलिए अलग-अलग तत्वों को खोने से बचने के लिए हमेशा बराबरी तय करने वाली तुलना शामिल करें
अगला पाठ्यक्रम: std::unordered_map के साथ तेज़ hash-आधारित खोज।
एआई शिक्षक के साथ C++ सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “कस्टम तुलनाकर्ता” पाठ निःशुल्क है?
हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “कस्टम तुलनाकर्ता” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“कस्टम तुलनाकर्ता” में मैं क्या सीखूँगा?
क्रम नियंत्रित करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“कस्टम तुलनाकर्ता” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- std::map
- std::set
- multimap और multiset
- कस्टम तुलनाकर्ता