C++中对vector自定义结构体类型的排序方法
5星 · 超过95%的资源 需积分: 50 142 浏览量
更新于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-06-13 上传
2023-07-28 上传
2023-09-03 上传
2023-05-11 上传
2024-09-10 上传
2023-08-14 上传
2023-08-29 上传
yanwuoxuao
- 粉丝: 0
- 资源: 3
最新资源
- RoslynQuoter:Roslyn工具,用于给定的C#程序显示语法树API调用以构造其语法树
- 奢华酒店别墅预定响应式模板
- 西蒙游戏
- 交通灯控制PLC程序.rar
- 电信设备-基于邻域信息与高斯滤波的CBCT全景图非线性锐化增强方法.zip
- invisiblecities:书本探索
- 华硕TUF B450M-PLUS GAMING驱动程序下载
- 教育门户手机网站模板
- anonym-blog:博客系统
- 零基础也能学会的目标检测:YOLO入门指南!.zip
- 韩国平网程序.rar
- rlisp:用Ruby编写的简单方案解释器
- masstech-info-demo-page
- template-react-styled-components:模板criado做零通信创建应用程序的应用程序样式化组件
- starting-websockets:Makers Academy 第 7 周活动 - Websockets 和 Socket.io 简介
- GUI Timestack processing software-开源