c++ sort排序

在编写项目时,经常要用到排序算法,可以自己写算法,比如冒泡排序,快速排序等,但是可能比较容易出错,其实c++已经自带排序算法函数:sort

下面简单说一下sort函数的用法:

要sort函数,必须包含头文件:

#include <algorithm>

举个简单的例子:

#include <algorithm>

bool Com_n(int& x, int& y)
{
    return x < y;
}

//CArray
CArray<int,int&> arInt;
arInt.add(1);
arInt.add(6);
arInt.add(2);
arInt.add(9);
sort(arInt.GetData(), arInt.GetData()+arInt.GetSize(), Com_n);

//数组
int a[] = {15,4,8,9,7,12,6};
sort(a,a+7); 


sort函数的第三个参数是自己实现的比较函数,如果只用前两个参数,不用第三个参数,则默认按照升序排序。

有一点非常重要,自己定义的比较函数,一定要写成全局函数,不要写成类成员函数

### C++ STL `sort` 函数的用法和示例 #### 基本语法 `std::sort` 是 C++ 标准模板库中的一个重要算法,用于对容器内的元素进行排序。其基本形式如下: ```cpp template< class RandomIt > void sort( RandomIt first, RandomIt last ); ``` 此版本使用操作符 `<` 对范围 `[first, last)` 中的元素进行升序排列。 对于自定义比较器的情况,则可以采用以下签名: ```cpp template< class RandomIt, class Compare > void sort( RandomIt first, RandomIt last, Compare comp ); ``` 这里 `comp` 参数是一个二元谓词,它定义了严格弱顺序关系,并返回两个参数中较小者先出现的结果[^1]。 #### 示例代码 下面给出几个具体的例子来展示如何应用 `std::sort` 进行不同类型的数组或向量排序。 ##### 整数型数据排序 当处理简单的整数值时,可以直接调用无参版 `std::sort` 来完成工作。 ```cpp #include <iostream> #include <vector> #include <algorithm> int main(){ std::vector<int> numbers = {5, 3, 7, 9, 2}; // 使用默认的小于运算符 '<' 排序 std::sort(numbers.begin(), numbers.end()); for(auto num : numbers){ std::cout << num << ' '; } } // 输出: 2 3 5 7 9 ``` ##### 自定义对象排序 如果要按照特定属性对复杂结构体或者类实例进行排序,则需提供额外的比较逻辑给第三个参数——即比较函数。 假设有一个表示学生的简单结构体及其成绩字段作为排序依据: ```cpp struct Student { std::string name; double grade; bool operator<(const Student& other)const{ return grade < other.grade; } }; bool compareByGrade(const Student& lhs, const Student& rhs){ return lhs.grade < rhs.grade; } int main(){ std::vector<Student> students = { {"Alice", 88}, {"Bob", 92}, {"Charlie", 85} }; // 方法一:通过重载成员运算符 '<' std::sort(students.begin(), students.end()); // 或者方法二:传递外部比较函数 std::sort(students.begin(), students.end(), compareByGrade); for(auto student : students){ std::cout << student.name << ": " << student.grade << '\n'; } /* * 输出: * Charlie: 85 * Alice: 88 * Bob: 92 */ } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值