Std :: sort бойынша сынып әдісін салыстыру құралын пайдаланыңыз

Possible Duplicate:
problem sorting using member function as comparator

Сыныптау әдісін std :: sort түрінде салыстыру функциясы ретінде пайдалану мүмкін бе?

Мысалға:

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

Егер иә болса, мұны қалай істеймін?

1
Сіздің сынып үшін операторы < анықтауға мүмкіндік бар ма?
қосылды автор Kerrek SB, көзі
операторы() анықталды
қосылды автор Vik, көзі

2 жауаптар

Ия, сіз 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
қосылды
Бұл жауапты қабылдауы керек, себебі ... сұраққа жауап береді
қосылды автор sehe, көзі
@gred - Эмпирикалық, иә . Менде стандартты фрагменттер мен аяттар жоқ, бірақ, & S :: Compare дегеніміз емес функциясына деген байланысты. Бұл функцияға сілтегіш-функция, мүлде басқа аңдар.
қосылды автор Robᵩ, көзі
<�Код> & S :: Салыстыру ішінен & керек пе? Мен оны әдетте өзіме қоямын, себебі мен мұны дұрыс деп санамаймын, бірақ мен жай ғана қызықты болдым, өйткені & жоқ функция көрсеткіштерін мысалдармен көрдім.
қосылды автор gred, көзі

Функцияны кері шақыру ретінде беру керек:

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

Сіздің функцияңызды static деп есептейік, мен басқа мәселені көрмеймін.

0
қосылды
@Vik ықтимал көшірме ретінде орналастырылған сілтемені тексеріңіз.
қосылды автор Luchian Grigore, көзі
Статикамен келісемін, бірақ статистикалық емес әдістер туралы не деуге болады?
қосылды автор Vik, көзі