当前位置: 首页 > article >正文

C++:sort自动排序函数

在 C++ 中,std::sort 是一个用于对容器(如数组、std::vectorstd::deque 等)中的元素进行排序的标准库算法。std::sort 函数定义在 <algorithm> 头文件中,提供了多种排序方法,包括默认排序和自定义排序。

基本用法

  1. 排序 std::vector:

默认情况下,std::sort 按升序排序,即从小到大。你可以使用 std::sortstd::vector 进行排序,如下所示:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> numbers = {4, 1, 8, 5, 2};

    // 默认升序排序
    std::sort(numbers.begin(), numbers.end());

    // 输出排序后的结果
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出:

1 2 4 5 8

2.自定义排序:

你可以通过提供自定义的比较函数或函数对象来改变排序的方式。例如,如果你希望按降序排序,可以使用 std::greater<> 函数对象:

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

int main() {
    std::vector<int> numbers = {4, 1, 8, 5, 2};

    // 降序排序
    std::sort(numbers.begin(), numbers.end(), std::greater<int>());

    // 输出排序后的结果
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

3.排序自定义对象:

如果你有一个自定义类型的对象,你可以提供一个自定义的比较函数来对这些对象进行排序。例如,假设你有一个 Person 结构体,你希望按年龄对 Person 对象进行排序:

#include <iostream>
#include <vector>
#include <algorithm>

struct Person {
    std::string name;
    int age;

    Person(const std::string& n, int a) : name(n), age(a) {}
};

// 自定义比较函数
bool compareByAge(const Person& a, const Person& b) {
    return a.age < b.age;
}

int main() {
    std::vector<Person> people = {
        {"Alice", 30},
        {"Bob", 25},
        {"Charlie", 35}
    };

    // 按年龄排序
    std::sort(people.begin(), people.end(), compareByAge);

    // 输出排序后的结果
    for (const auto& person : people) {
        std::cout << person.name << " (" << person.age << ") ";
    }
    std::cout << std::endl;

    return 0;
}

输出:

Bob (25) Alice (30) Charlie (35)

std::sort 函数原型

std::sort 的基本原型如下:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
  • firstlast: 这两个迭代器指定了要排序的范围 [first, last)
  • comp: 是一个可选的比较函数或函数对象,用于指定排序规则。如果省略,std::sort 默认使用 < 操作符进行升序排序。

总结

  • 默认排序: std::sort 默认按升序排序。
  • 自定义排序: 通过提供比较函数或函数对象可以进行自定义排序。
  • 排序对象: 可以排序自定义对象,只需提供适当的比较逻辑。

std::sort 是一个高效的排序算法,通常实现为快速排序(quicksort),在平均情况下具有 O(n log n) 的时间复杂度


http://www.kler.cn/a/299980.html

相关文章:

  • 机器学习 vs 深度学习
  • 【2024年华为OD机试】(A卷,200分)- 优雅子数组 (JavaScriptJava PythonC/C++)
  • vector的使用,以及部分功能的模拟实现(C++)
  • sentinel微服务保护
  • 深入探究 YOLOv5:从优势到模型导出全方位解析
  • postgresql15的启动
  • cell phone teardown 手机拆卸
  • nvm只有iojs列表解决办法
  • from T2I to T2V
  • 构建响应式 Web 应用:Vue.js 基础指南
  • Kubernetes资源管理常用的标签分类有哪些?
  • IT前端好用的工具集
  • 【科研小白系列】使用screen创建虚拟终端,实现本地关机后服务器仍然跑模型
  • Elasticsearch 使用误区之五——单次请求获取大量数据
  • 实时系统资源监测:AutoPowerOptionsOK确保电脑性能与节能兼备
  • SpringBoot中利用EasyExcel+aop实现一个通用Excel导出功能
  • Mysql 数据库免费使用
  • windows七个消息队列
  • 基于springboot的校园志愿者管理系统的设计与实现 (含源码+sql+视频导入教程+论文+PPT)
  • 数学基础 -- 线性代数之格拉姆-施密特正交化
  • DNAT和SNAT实践
  • 软件测试之单元测试与unittest框架详解
  • Unity SRP 可编程渲染管线的基本用法
  • 虚幻引擎Gameplay探索 Actor 之间的高效通信与交互技巧二
  • 在springboot中如何使用Jetty替换Tomcat
  • LVGL 部件之滚轮(lv_roller)