使用比较运算符作为回报

时间:2016-05-31 16:26:11

标签: stl

我经常在cpp中使用标准功能 sort(A.begin(),A.end(),mycmp)

其中,

 bool mycmp(int a, int b)
       return (a>b);

对矢量A进行排序。但是,当问题要求自定义排序时,我常常感到困惑,并且需要多次尝试来修复我的比较功能。有人可以解释确切return (a>b);的含义;我也阅读了一些帖子,但仍然无法弄清楚> b如何确定下降的顺序。

  

帖子:   configure the compare function to work with std::sort

1 个答案:

答案 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排序实现以获取更多详细信息。

  1. https://www.sgi.com/tech/stl/sort.html
  2. https://www.sgi.com/tech/stl/download.html