C++中对vector自定义结构体类型的排序方法
5星 · 超过95%的资源 需积分: 50 31 浏览量
更新于2024-09-17
1
收藏 3KB TXT 举报
"C++中对vector排序的方法"
在C++编程中,`std::vector`是一种常用的数据结构,用于存储动态大小的元素序列。当vector中的元素是基本数据类型(如int、double等)时,我们可以直接使用`std::sort`函数对它们进行排序。但是,如果vector中存储的是自定义的结构体或类类型,我们需要采取不同的策略来实现排序。以下两种方法可以帮助我们完成自定义类型的vector排序。
### 方法1:重载比较运算符
一种方式是为自定义的结构体或类类型重载比较运算符,例如`<`和`>`。在给定的例子中,我们有一个名为`AssessTypeInfo`的结构体,它包含一个无符号整型成员`m_uiType`。为了实现排序,我们在结构体内定义了两个成员函数:
```cpp
bool operator<(const AssessTypeInfo& rhs) const {
return m_uiType < rhs.m_uiType;
}
bool operator>(const AssessTypeInfo& rhs) const {
return m_uiType > rhs.m_uiType;
}
```
`operator<`函数用于升序排序,而`operator>`则用于降序排序。当`std::sort`函数在比较元素时,它会自动调用这些重载的运算符。
### 使用`std::sort`进行排序
在主函数`main()`中,我们创建了一个`AssessTypeInfo`对象的vector,并填充了一些数据。然后,我们使用`std::sort`和重载的运算符进行排序:
```cpp
sort(ctn.begin(), ctn.end(), less<AssessTypeInfo>()); // 升序排序
sort(ctn.begin(), ctn.end(), greater<AssessTypeInfo>()); // 降序排序
```
`less<AssessTypeInfo>()`和`greater<AssessTypeInfo>()`是函数对象,它们分别代表小于和大于的关系。`std::sort`函数会根据这些关系对vector的元素进行比较并调整顺序。
### 打印排序结果
在排序后,我们可以通过遍历vector并打印`m_uiType`的值来验证排序效果。例子中的输出展示了升序和降序排列的结果:
```cpp
// 升序排序输出:1 2 3
// 降序排序输出:3 2 1
```
### 方法2:使用`std::sort`的自定义比较函数
除了重载比较运算符,还可以提供一个自定义的比较函数作为`std::sort`的第三个参数。这个函数接受两个元素作为参数,并返回一个布尔值,表示它们之间的关系。例如,我们可以这样定义一个比较函数:
```cpp
bool compareAssessTypeInfo(const AssessTypeInfo& lhs, const AssessTypeInfo& rhs) {
return lhs.m_uiType < rhs.m_uiType;
}
```
然后在`std::sort`调用中使用这个函数:
```cpp
sort(ctn.begin(), ctn.end(), compareAssessTypeInfo); // 升序排序
```
这种方法更加灵活,因为比较逻辑可以完全自定义,不仅限于某个成员变量的比较。
C++中对自定义类型vector的排序可以通过重载比较运算符或提供自定义比较函数来实现。这两种方法都可以确保`std::sort`正确地根据我们的需求对vector中的元素进行排序。
2008-09-12 上传
2023-08-14 上传
2023-06-13 上传
2023-08-29 上传
2023-07-28 上传
2024-04-12 上传
2023-07-28 上传
2024-09-10 上传
yanwuoxuao
- 粉丝: 0
- 资源: 3
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍