سؤال

أحاول أن أميل إلى Boost :: Bind ، Boost :: Lambda Libraries وكيف يمكن استخدامها مع خوارزميات STL. لنفترض أن لدي متجهًا من أزواج السلسلة الداخلية التي يتم فرزها بواسطة مفتاح INT. ثم يمكن العثور على مكان لإدخال زوج جديد مع الحفاظ على فرز المتجه على النحو التالي:

std::vector<std::pair<int, string> > entries;
...
int k = ...;

// Let's ignore std::lower_bound return value for now
std::lower_bound (entries.begin(), entries.end(), k, 
                  boost::bind (&std::pair<int, string>::first, _1) < k)

الآن أود استبدال operator< مع كائن وظيفة (من النوع std::less<int> في هذا المثال):

std::less<int> comparator;

كيف يمكنني تغيير الرمز أعلاه بحيث يعمل؟ لا أستطيع أن أفعل فقط

std::lower_bound (entries.begin(), entries.end(), k, 
                  comparator (boost::bind (&std::pair<int, string>::first, _1), k))

لان std::less<int>::operator() لا يقبل كل ما هو نوع العودة من boost::bind. ماذا أفتقد هنا؟ تيا

هل كانت مفيدة؟

المحلول

كل ما تفتقده هو آخر bind (ومعلمات القالب على pair):

std::lower_bound(entries.begin(), entries.end(), k, 
                 boost::bind(comparator,
                             boost::bind(&std::pair<int, string>::first, _1),
                             k))

ليس عليك القيام بذلك على المشغل الأقل من الرمز الأصلي لأن Boost.bind يوفر عمليات تحميل زائدة لهذا المشغل الذي يعرف كيفية التعامل مع نوع الإرجاع boost::bind.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top