我经常在cpp中使用标准功能
sort(A.begin(),A.end(),mycmp)
其中,
bool mycmp(int a, int b)
return (a>b);
对矢量A进行排序。但是,当问题要求自定义排序时,我常常感到困惑,并且需要多次尝试来修复我的比较功能。有人可以解释确切return (a>b);
的含义;我也阅读了一些帖子,但仍然无法弄清楚> b如何确定下降的顺序。
答案 0 :(得分:0)
您可以将cmp
视为小于运算符<
的实现。我之后使用lt
以外的<
。
为简化问题,假设我们有冒泡排序:
typedef bool (*cmp)(int, int);
bool inc(int a, int b) { return a < b; }
bool dec(int a, int b) { return a > b; }
void bubble_sort(int a[], int n, cmp lt) {
for (int i=0; i<n; ++i) {
for (int j=0; j+1<n-i; ++j) {
if (lt(a[j+1], a[j])) swap(a[j], a[j+1]);
}
}
}
a[j], a[j+1]
仅在lt(a[j+1],a[j])
为true
时进行互换。
inc
作为比较函数传递,则lt(a[j+1],a[j])
true
表示a[j+1]<a[j]
,因此它的排序越来越多。dec
作为比较函数传递,则lt(a[j+1],a[j])
true
表示a[j+1]>a[j]
,因此它会逐渐排序。您可以查看sgi排序实现以获取更多详细信息。