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) 的时间复杂度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值