按一个在c ++中带参数的函数排序?

时间:2013-02-07 22:34:45

标签: c++ sorting

我正在尝试编写一个函数,用各种不同的属性对自定义类对象的向量进行排序。

c ++排序参考,可在此处找到:

http://www.cplusplus.com/reference/algorithm/sort/

说你可以这样排序:

std::sort (myvector.begin(), myvector.end(), myfunction);

除了我的矢量中的两个对象之外,我希望能够将参数传递给myfunction:

std::sort (myvector.begin(), myvector.end(), myfunction(mode=7));

你知道这样做的方法吗?

我对c ++比较陌生,来自python,这很容易。

3 个答案:

答案 0 :(得分:5)

如果您使用的是C ++ 11,则可以使用lambda:

sort(myvec.begin(), myvec.end(), [] (Type a, Type b) { return myfunction(a,b,7); });

答案 1 :(得分:3)

您可以使用仿函数代替自由函数:

struct Functor{
  int mode;
  bool operator() (int a,int b) { return (a<b);}
} functor;

()调用仿函数时,重载的sort运算符会执行。在那里你可以有一个变量mode并根据需要使用它。 然后设置模式(您也可以在functor构造函数中设置)并使用它调用sort

functor.mode = 7; // or set it in the constructor
std::sort (myvector.begin(), myvector.end(), functor);

答案 2 :(得分:1)

创建一个仿函数:

struct MyFunction {
  bool operator()(const T& lhs, const T& rhs) const { /* implement logic here */ }
  int mode;
};

然后传递一个实例而不是普通函数myfunction。在这里,T是用于实例化std::vector的类型。

MyFunction f;
f.mode = 7;
std::sort (myvector.begin(), myvector.end(), f);

如果您支持C ++ 11,则可以使用lambda函数:

std::sort(myvector.begin(), myvector.end(), [](const T&a, const T& b) { /* implement*/ });