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

Posted

技术标签:

【中文标题】使用非静态成员函数的 C++ 排序向量【英文标题】:C++ sort vector using non-static member function 【发布时间】:2011-01-22 17:39:07 【问题描述】:

我有一个名为Sorter 的课程。它有两个公共项目。

    int 类型变量 choice 名为compare 的成员函数具有int 类型的返回值,它接受两个对象作为参数。

我尝试创建Sorter 的实例,同时将带有值的choice 传递给构造函数,

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

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

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

有人可以给我建议吗?

【问题讨论】:

您要达到的目标并不完全清楚。请发布一些代码,例如Sorter的定义和使用示例。 【参考方案1】:

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

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

然后您可以将Sorter 类的实例传递给std::sort

【讨论】:

【参考方案2】:

不幸的是,标准库有点缺乏像这样的组合器。但是,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));

【讨论】:

以上是关于使用非静态成员函数的 C++ 排序向量的主要内容,如果未能解决你的问题,请参考以下文章

C++使用模板类调用非静态成员函数

关于C++静态成员函数访问非静态成员变量的问题

指向任何类类型的非静态成员函数的 C++ 函数指针

C++静态成员函数访问非静态成员的四种方法

错误:非静态成员函数 C++ 的无效使用

C++ freeRTOS 任务,无效使用非静态成员函数