21xrx.com
2024-12-22 20:02:43 Sunday
登录
文章检索 我的文章 写文章
C++ STL 排序入门指南
2023-07-09 19:27:34 深夜i     --     --
C++ STL 排序 入门指南 算法

C++ STL(Standard Template Library)是 C++ 标准库中一个重要的组成部分。它提供了一系列的数据结构和算法,包括排序。在本篇文章中,我们将介绍 C++ STL 中排序的基本知识和使用方法。

1. sort() 函数

sort() 函数是 C++ STL 中最基本的排序函数之一。它使用了快速排序算法,并可以对任意类型的元素进行排序。sort() 函数的定义如下:


template<class RandomAccessIterator>

void sort(RandomAccessIterator first, RandomAccessIterator last);

其中,first 和 last 分别指向排序区间的起始位置和结束位置,包含起始位置的元素但不包含结束位置的元素。如果需要按照降序排序,可以加入一个比较函数:


template<class RandomAccessIterator, class Compare>

void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp);

其中,comp 为比较函数,返回值为 true 表示首个参数小于等于第二个参数,返回值为 false 表示首个参数大于第二个参数。

2. vector 容器的排序

vector 是 STL 中最常用的容器之一。对于 vector 容器,可以使用 sort() 函数进行排序:


#include <vector>

#include <algorithm>

using namespace std;

vector<int> vec 3;

sort(vec.begin(), vec.end()); // 从小到大排序

如果需要按照降序排序,可以将比较函数改为 greater:


sort(vec.begin(), vec.end(), greater<int>()); // 从大到小排序

3. array 容器的排序

array 是 STL 中的另一个容器,它与 vector 相比,具有固定大小的特点。对于 array 容器,可以使用 sort() 函数进行排序:


#include <array>

#include <algorithm>

using namespace std;

array<int, 5> arr 2;

sort(arr.begin(), arr.end()); // 从小到大排序

与 vector 容器相同,如果需要按照降序排序,可以将比较函数改为 greater。

4. 自定义结构体的排序

对于自定义结构体,可以使用自定义的比较函数进行排序。假设有以下的结构体定义:


struct Person

  string name; // 姓名

  int age;   // 年龄

  double height; // 身高

;

如果需要按照年龄从小到大排序,可以定义一个比较函数:


bool cmp(Person p1, Person p2)

  return p1.age < p2.age;

使用 sort() 函数进行排序:


#include <algorithm>

using namespace std;

vector<Person> people{ 20, 18, "Alice"};

sort(people.begin(), people.end(), cmp); // 按照年龄从小到大排序

5. 总结

C++ STL 中的 sort() 函数可以用来对 vector、array 和自定义结构体等类型进行排序。sort() 函数具有简单、高效的特点,并使用了优秀的快速排序算法。在实际编程中,熟练使用 C++ STL 中的 sort() 函数可以提高编程效率和代码质量。

  
  

评论区

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