1. आधुनिक सी ++ 20 समाधान
auto cmp = [](int a, int b) { return ... };
std::set<int, decltype(cmp)> s;
हम लैम्ब्डा फ़ंक्शन का उपयोग तुलनित्र के रूप में करते हैं। हमेशा की तरह, तुलनित्र को बूलियन मान वापस करना चाहिए, यह दर्शाता है कि पहले तर्क के रूप में पारित तत्व को परिभाषित करने वाले विशिष्ट सख्त कमजोर क्रम में दूसरे से पहले जाने के लिए माना जाता है या नहीं ।
ऑनलाइन डेमो
2. आधुनिक सी ++ 11 समाधान
auto cmp = [](int a, int b) { return ... };
std::set<int, decltype(cmp)> s(cmp);
C ++ 20 से पहले हमें लंबर को कंस्ट्रक्टर सेट करने के तर्क के रूप में पारित करना होगा
ऑनलाइन डेमो
3. पहले समाधान के समान, लेकिन लंबोदर के बजाय फ़ंक्शन के साथ
तुलनित्र को सामान्य बूलियन फ़ंक्शन के रूप में बनाएं
bool cmp(int a, int b) {
return ...;
}
फिर इसका उपयोग इस तरह से करें:
std::set<int, decltype(cmp)*> s(cmp);
ऑनलाइन डेमो
या इस तरह:
std::set<int, decltype(&cmp)> s(&cmp);
ऑनलाइन डेमो
4. ()ऑपरेटर के साथ संरचना का उपयोग करके पुराना समाधान
struct cmp {
bool operator() (int a, int b) const {
return ...
}
};
// ...
// later
std::set<int, cmp> s;
ऑनलाइन डेमो
5. वैकल्पिक समाधान: बूलियन फ़ंक्शन से संरचना बनाएं
बूलियन फ़ंक्शन लें
bool cmp(int a, int b) {
return ...;
}
और इसका उपयोग करके संरचना बनाएं std::integral_constant
#include <type_traits>
using Cmp = std::integral_constant<decltype(&cmp), &cmp>;
अंत में, तुलनित्र का उपयोग तुलनित्र के रूप में करें
std::set<X, Cmp> set;
ऑनलाइन डेमो