使用非静态成员函数的 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++ 排序向量的主要内容,如果未能解决你的问题,请参考以下文章