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

5星 · 超过95%的资源 需积分: 50 31 下载量 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中的元素进行排序。