Std :: sort bo'yicha sinf usullarini taqqoslash usulidan foydalaning

Possible Duplicate:
problem sorting using member function as comparator

Std :: sortida taqqoslash funktsiyasi sifatida sinf usulidan foydalanish mumkinmi?

misol uchun:

std::sort(list.begin(),list.end(),object->comparator) //Doesn't compile

Ha bo'lsa, buni qanday qilib qilaman?

1
Sizning sinfingiz uchun operatori < ni belgilash imkoniyati bormi?
qo'shib qo'ydi muallif Kerrek SB, manba
Zotan, operator()
qo'shib qo'ydi muallif Vik, manba

2 javoblar

Ha, boost :: bind :

#include 
#include 
#include 
#include 

struct S {
  bool ascending;
  bool Compare(int lhs, int rhs) {
    return ascending ? (lhs < rhs) : (rhs < lhs);
  }
};

int main() {

  int i[] = { 1, 3, 5, 7, 8, 6, 4, 2 };
  S s;
  s.ascending = true;
  std::sort(i, i+8, boost::bind(&S::Compare, &s, _1, _2));
  std::copy(i, i+8, std::ostream_iterator(std::cout, " "));
  std::cout << "\n";

  s.ascending = false;
  std::sort(i, i+8, boost::bind(&S::Compare, &s, _1, _2));
  std::copy(i, i+8, std::ostream_iterator(std::cout, " "));
  std::cout << "\n";
}
6
qo'shib qo'ydi
Bu qabul qilingan javob bo'lishi kerak, chunki u ... savolga javob beradi
qo'shib qo'ydi muallif sehe, manba
@gred - Ampirik ravishda, ha . Menda standartga muvofiq bo'lim va oyat yo'q, lekin menimcha & S :: Compare emas, balki funksiyasiga ishora qiladi. Bu butunlay boshqacha hayvonga o'xshash vazifaga ega.
qo'shib qo'ydi muallif Robᵩ, manba
& S :: Compare dan & kerakmi? Men odatda o'zimga o'zim qo'ydim, chunki men buning uchun noto'g'ri emasligiga aminman, lekin faqatgina & holda vazifa ko'rsatgichlari misollarini ko'rganimdan juda qiziq bo'ldim.
qo'shib qo'ydi muallif gred, manba

Funksiyani qayta qo'ng'iroq qilish sifatida taqdim etishingiz kerak:

std::sort(list.begin(),list.end(),object::comparator)

Funktsiyani allaqachon static deb hisoblasangiz, boshqa hech qanday muammo ko'rmayapman.

0
qo'shib qo'ydi
@Vik ehtimoliy nusxada chop etilgan havolani tekshiring.
qo'shib qo'ydi muallif Luchian Grigore, manba
Statik bilan rozi bo'ling, ammo statik usullar haqida nima deyish mumkin?
qo'shib qo'ydi muallif Vik, manba