类:
class classname{
public:
int N,M;
};
classname a> classname b如果a.N> B.N
答案 0 :(得分:5)
class classname{
public:
int N,M;
bool operator< (const classname& other) const { return N < other.N; }
};
...
std::vector<classname> arr;
...
std::sort(arr.begin(), arr.end());
或者您想使用C qsort
?
static int compare_classname (const void* a, const void* b) {
const classname* _a = reinterpret_cast<const classname*>(a);
const classname* _b = reinterpret_cast<const classname*>(b);
return _a->N < _b->N ? -1 : _a->N > _b->N ? 1 : 0;
}
...
classname* arr = new classname[n];
...
qsort(arr, n, sizeof(arr[0]), compare_classname);
答案 1 :(得分:4)
由于您使用的是C ++,我的建议是使用std :: sort而不是qsort。在这种情况下,您通常将比较函数实现为operator<
:
class classname {
public:
int N, M;
bool operator<(classname const &other) const {
return N < other.N;
}
};
编辑: 如果你坚持使用C的qsort,比较函数看起来像这样:
int comparator(void *a, void *b) {
return ((classname *)b)->N - ((classname *)a)->N;
}
答案 2 :(得分:4)
struct Functor {
bool operator()(const classname & left, const classname & right) {
return left.N < right.N;
}
}
std::sort(container.begin(), container.end(), Functor());
答案 3 :(得分:2)
如果您特别想使用qsort
,那么该功能将是
int compare_classname(const void *a, const void *b)
{
return static_cast<const classname*>(a)->N
- static_cast<const classname*>(b)->N;
}
但正如其他人所说,你最好用std::sort
。它是类型安全的,并且可能更快,因为它可以内联比较。
答案 4 :(得分:1)
如果您真的想要C qsort
(如果您使用C ++则不应该这样):
int compare(const void * a, const void * b)
{
return static_cast<classname*>(a)->N < static_cast<classname*>(b)->N;
}
然后将比较作为qsort
答案 5 :(得分:1)
这应该有用。
#include <stdlib.h>
class classname{
public:
int N,M;
};
static int
cmp_classname(const void * p1, const void * p2)
{
const classname * pc1 = reinterpret_cast<const classname *>(p1);
const classname * pc2 = reinterpret_cast<const classname *>(p2);
if (pc1->N < pc2->N) {
return -1;
} else if (pc1->N > pc2->N) {
return 1;
}
return 0;
}
而且,是的,std :: sort()可能更好。