21xrx.com
2024-11-22 02:30:46 Friday
登录
文章检索 我的文章 写文章
C++中使用自定义排序的sort()函数
2023-07-05 12:48:23 深夜i     --     --
C++ 自定义排序 sort()函数

在C++中,排序是一个常见而重要的操作,而自定义排序则在某些情况下是非常必要的。C++标准库提供了一个sort()函数进行排序,但默认情况下是按照升序排列的。在某些情况下,我们需要根据自己所定义的方式对数据进行排序,这时就需要使用自定义排序的sort()函数。

C++中的sort()函数是模板函数,可以对各种类型的数据进行排序。默认情况下,sort()函数是按升序排列的,但它可以通过使用自定义的比较函数或函数对象进行排序。

首先来看一下sort()函数的默认使用方法。假设我们需要对一个整型数组进行排序,可以使用如下代码:


int arr[] = 3;

int n = sizeof(arr) / sizeof(arr[0]);

sort(arr, arr + n);

这段代码将整型数组arr进行升序排序。sort()函数的第一个参数是一个指向数组的指针,第二个参数是指向数组最后一个元素后一个位置的指针。sort()函数默认使用<运算符对元素进行比较,因此我们不需要传递比较函数。

但如果我们需要对字符串数组进行排序,sort()函数就不再适用了。比如,我们想要按字符串长度进行排序,可以编写如下比较函数:


bool cmp(const string& a, const string& b) {

  return a.length() < b.length();

}

这个函数接受两个参数a和b,返回a是否小于b。我们将其称为比较函数。接下来,我们可以使用sort()函数进行排序:


string arr[] = { "hello", "world", "c++", "programming" };

int n = sizeof(arr) / sizeof(arr[0]);

sort(arr, arr + n, cmp);

注意,这里我们传递了第三个参数cmp以代替默认比较函数。sort()函数调用cmp比较函数对元素进行排序。

除了使用函数比较,C++还支持使用函数对象进行比较,这通常被称为仿函数(functor)。相对于函数指针,仿函数有更好的性能和可维护性。下面是一个使用函数对象进行排序的例子:


class LengthComp {

public:

  bool operator()(const string& a, const string& b) {

    return a.length() < b.length();

  }

};

string arr[] = { "hello", "world", "c++", "programming" };

int n = sizeof(arr) / sizeof(arr[0]);

sort(arr, arr + n, LengthComp());

这里我们定义了一个名为LengthComp的类,它实现了()运算符,即仿函数。sort()函数的第三个参数是一个LengthComp对象,即将该对象括在括号内。

总之,C++中的sort()函数提供了非常灵活的排序方式,可以通过自定义比较函数或函数对象来实现各种排序需求。熟练掌握这些知识可以使我们在编写C++程序时更加得心应手。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复