C++ Sort函数用法

本文通过一个C++示例展示了如何使用自定义结构体并实现两种不同的排序方法:基于整数比较和字符串比较。代码中定义了一个结构体Test,并创建了包含该结构体元素的vector容器,接着实现了两种比较函数intcmp和strcmp1用于sort函数进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>

typedef struct Test
{
public:
	int n;
	char* s;
}Test;

vector<Test> t;

bool intcmp(Test a,Test b)
{    
	return a.n < b.n;
}

bool strcmp1(Test a,Test b)
{    
	return strcmp(a.s,b.s) < 0;
}

int main()
{
	Test tmp = {0};

	tmp.n = 4;
	tmp.s = "gggg";
	t.push_back(tmp);

	tmp.n = 1;
	tmp.s = "dddd";
	t.push_back(tmp);

	tmp.n = 2;
	tmp.s = "cccc";
	t.push_back(tmp);

	sort(t.begin(),t.end(),strcmp1);

	for (vector<Test>::iterator iter = t.begin(); iter != t.end(); ++iter)
	{
		cout << iter->s << endl;
	}
}


### C++ 中 `sort()` 函数的使用方法 #### 基本概念 `sort()` 是 C++ 标准模板库(STL)中的一个函数模板,位于 `<algorithm>` 头文件中。此函数用于对数组或容器内的元素进行排序操作[^1]。 --- #### 函数原型 以下是 `sort()` 的几种常见形式: 1. **默认升序排序** ```cpp void sort(RandomAccessIterator first, RandomAccessIterator last); ``` 参数解释: - `first`: 排序范围的第一个迭代器。 - `last`: 排序范围最后一个位置之后的一个迭代器(即不包含该位置上的元素)。 2. **自定义排序方式** ```cpp void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); ``` 这里增加了一个第三个参数 `comp`,表示用户可以提供自己的比较逻辑来决定排序顺序[^2]。 --- #### 示例代码 ##### 例子 1: 对整型数组进行升序排列 ```cpp #include <iostream> #include <algorithm> int main(){ int n; std::cin >> n; int a[n]; for(int i=0;i<n;i++) { std::cin >> a[i]; } // 调用 sort() 函数,默认按升序排序 std::sort(a, a+n); for(int i=0;i<n;i++) { std::cout << a[i] << " "; } return 0; } ``` 上述程序读取一组整数并将其从小到大排序输出[^4]。 --- ##### 例子 2: 自定义降序排序 (通过 Lambda 表达式) 如果希望按照降序排列,则可以通过传递一个 lambda 表达式作为第三个参数给 `sort()` 来实现这一点: ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ vector<int> v{5, 3, 8, 6, 9}; // 使用lambda表达式指定降序规则 sort(v.begin(), v.end(), [](const int& lhs, const int& rhs){ return lhs > rhs; }); for(auto num : v){ cout<<num<<" "; } return 0; } ``` 在这个版本中,我们利用了 STL 容器 `vector`, 并且借助匿名函数指定了新的比较准则——当左边大于右边时交换两者的位置. --- #### 反向排序的方法 除了上面提到的方式外,还可以直接调用预定义好的类对象来进行逆序处理。比如下面展示的是如何运用标准库里的 `std::greater<>` 实现同样的效果: ```cpp #include <functional> // 需要引入 functional 库支持 greater<T>() ... // 利用 std::greater 达成降序目的 sort(vec.begin(), vec.end(), std::greater<int>()); ``` 这里采用了泛化后的写法,适用于任何内置或者用户定义的数据类型[^5]。 --- ### 总结 综上所述,在实际开发过程中可以根据具体需求灵活选用不同的策略完成相应的任务;无论是简单的数值列表还是复杂的结构体集合都可以轻松应对!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值