使用非静态成员函数的C ++排序向量

时间:2011-01-22 17:39:08

标签: c++ sorting pointers function-pointers member-function-pointers

我有一个名为Sorter的班级。它有两个公共项目。

  1. int类型变量choice
  2. 名为compare的成员函数,其int类型的返回值接受两个对象作为参数。
  3. 我尝试在将Sorter传递给构造函数时创建choice的实例,

    然后我想使用C ++ sort函数对vector进行排序。并传递我创建的实例的成员函数compare

    compare成员函数使用变量choice来决定排序机制。

    但是我无法获得指向compare实例的成员函数Sorter的指针。

    有人可以就此提出建议吗?

2 个答案:

答案 0 :(得分:4)

如果您可以更改Sorter类的结构,可以通过这样定义operator ()使其成为函数对象:

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

然后,您只需将Sorter课程的实例传递给std::sort

答案 1 :(得分:0)

不幸的是,对于像这样的事情,标准库在组合器方面有点缺乏。但是,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));
}