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);
সি ++ 20 এর আগে কনস্ট্রাক্টর সেট করার জন্য আমাদের ল্যাম্বদা পাস করতে হবে
অনলাইন ডেমো
৩. প্রথম সমাধানের মতো, তবে ল্যাম্বদার পরিবর্তে ফাংশন সহ
বুলিয়ান ফাংশন হিসাবে তুলনামূলক করুন
bool cmp(int a, int b) {
return ...;
}
তারপরে এটি ব্যবহার করুন, হয় এইভাবে:
std::set<int, decltype(cmp)*> s(cmp);
অনলাইন ডেমো
বা এইভাবে:
std::set<int, decltype(&cmp)> s(&cmp);
অনলাইন ডেমো
৪. ()
অপারেটরের সাথে কাঠামো ব্যবহার করে ওল্ড সমাধান solution
struct cmp {
bool operator() (int a, int b) const {
return ...
}
};
// ...
// later
std::set<int, cmp> s;
অনলাইন ডেমো
৫. বিকল্প সমাধান: বুলিয়ান ফাংশন থেকে কাঠামো তৈরি করুন
বুলিয়ান ফাংশন নিন
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;
অনলাইন ডেমো