2

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

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,这很容易。

4

3 回答 3

5

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

sort(myvec.begin(), myvec.end(), [] (Type a, Type b) { return myfunction(a,b,7); });
于 2013-02-07T22:39:32.127 回答
3

您可以使用仿函数而不是自由函数:

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

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

functor.mode = 7; // or set it in the constructor
std::sort (myvector.begin(), myvector.end(), functor);
于 2013-02-07T22:37:09.990 回答
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*/ });
于 2013-02-07T22:37:03.620 回答