我正在尝试编写一个函数,用各种不同的属性对自定义类对象的向量进行排序。
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,这很容易。
答案 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*/ });