
C++中对vector自定义结构体类型的排序方法

"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中的元素进行排序。
相关推荐









yanwuoxuao
- 粉丝: 0
最新资源
- 陈火旺编著《编译原理》第三版课后答案解析
- 数据库实验操作详解与指导教程
- ONES:全面支持多种格式的刻录软件
- JQuery中文API文档:全面详细指南
- C语言可视化编程工具wintc191简易实用
- 掌握Oracle ERP必修课:深入学习BOM培训资料
- TQuickRep组件在报表输出中的应用实例
- 基于JSP技术的留言板系统设计与数据库应用
- 史上最高效C盘垃圾清理软件体验
- Linux环境FTP与TFTP客户端配置与使用指南
- NeHe教程第六至第十课源码揭秘
- 学习Java五子棋完整源代码实战指南
- 百个Visual C++源码范例精选
- 零基础入门JavaScript教程与实战演练
- 探索压缩工具箱:高效处理节目单文件
- PHP网购系统源码安装与管理指南
- IMG格式软驱启动盘映像及其基本工具解析
- C++实现监控与管理Windows进程的源码
- VS2005工具栏开发实例教程与源码下载
- 移动端自封装INI文件读取方法详解
- C#文件加密器:学习加密算法的实用项目
- Servlet过滤器技术的实战应用与解析
- 单页文档中多图显示与打印的技术实现
- VS2005应用程序界面美化增强:第三方控件大全