我想使用此对向量v排序
std::sort(v.begin(),v.end(),cmpr);
我的cmpr函数在哪里
bool cmpr(int a,int b, int c)
{
return a%c <= b%c;
}
现在我想知道如何通过c?
您可以使用lambda包装比较器。完整示例:
#include <algorithm>
#include <iostream>
auto make_cmpr(int c)
{
return [c](int a, int b) {
return a%c <= b%c;
};
}
int main()
{
int a[5] = {2, 4, 1, 3, 5};
std::sort(a, a + 5, make_cmpr(3));
/* or directly
int c = 3;
std::sort(a, a + 5,
[c](int a, int b) {
return a%c <= b%c;
}
);
*/
for (int e : a) std::cout << e << ' ';
}
尽管如此,您无法将直接c
传递给该函数,因为std:sort function
的第三个参数只是一个指针函数。但是您可以尝试这样:
class YourOpe{
int c;
public:
YourOpe(int cc){ c = cc; }
bool yourOperator()(int a, int b) const {
return cmpr( a , b , c);
}
};
因此,您可以:std::sort(v.begin(),v.end(), (new YourOpe(c)).yourOperator);