Сортировка вектора C ++ с использованием нестатической функции-члена - PullRequest
0 голосов
/ 22 января 2011

У меня есть класс с именем Sorter.Он имеет два открытых элемента.

  1. int переменная типа choice
  2. функция-член с именем compare с возвращаемым значением типа int, которое принимает два объекта в качестве параметра.

Я пытался создать экземпляр Sorter при передаче choice со значением в конструктор,

Затем я хотел использовать функцию C ++ sort для сортировки vector.и передать функцию-член compare экземпляра, который я создал.

Функция-член compare использует переменную choice для определения механизма сортировки.

Но я не смогчтобы получить указатель на функцию-член compare экземпляра Sorter.

Может кто-нибудь посоветовать мне это?

Ответы [ 2 ]

4 голосов
/ 22 января 2011

Если вы можете изменить структуру вашего Sorter класса, вы можете сделать его функциональным объектом, определив operator () следующим образом:

bool Sorter::operator ()(const MyObject &o1, const MyObject &o2) {
  // return true if o1 < o2
}

Тогда вы можете просто передать экземпляр вашего Sorter класса std::sort.

0 голосов
/ 22 января 2011

К сожалению, стандартной библиотеке немного не хватает комбинаторов для подобных вещей.Тем не менее, boost :: lambda может выполнить эту работу:

#include <boost/lambda/bind.hpp>

namespace l = boost::lambda;

struct foo {
    bool bar(char, char);
};


void test(foo *pFoo) {
    char a[2] = {0};

    std::sort(a, a+1,
            l::bind(&foo::bar, pFoo, l::_1, l::_2));
}
...