繁体   English   中英

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

[英]Sort by a function that takes argument(s) in c++?

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

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

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

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

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

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

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

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

创建一个仿函数:

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*/ });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM