vector排序|vector多维数组排序|vector自定义排序|不改变相同元素相对顺序比较

本文介绍了C++中vector的排序方法,包括vector<int>的升序和降序排列,多维数组排序,结构体排序,并特别强调了如何在排序过程中保留相同元素的相对顺序,推荐使用stable_sort()函数以确保稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector<int>排序

头文件:#include <algorithm>

示例如下,默认升序

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
        vector<int>vec{5,4,6,9,8,1};
        sort(vec.begin(), vec.end());// 默认升序
        for(auto n:vec)
                cout<<n<<" ";
        return 0;
}
// 输出为 1 4 5 6 8 9

降序排列(最简单),只需补充

// 方法一:使用标准库比较函数对象
sort(vec.begin(), vec.end(), std::greater<int>());

 其他几种自定义方法参考文档

// 方法二:使用自定义函数对象
struct {
    bool operator()(int a, int b) const
    {   
        return a > b;
    }   
} customLess;
sort(s.begin(), s.end(), customLess);
// 方法三:借助lambda表达
std::sort(s.begin(), s.end(), [](int a, int b) {
    return a > b;   
});

复杂度-->快速排序

O(N\dot log(N))

vector多维数组比较

默认按照第一个维度排序

如果需要对其他维度排序,就需要自己写比较函数

这里用lambda表达来实现

vector<vector<int>>vec(5, vector<int>(5));//构造5x5数组

sort(vec.begin(), vec.end(), [](const vector<int>&a, const vector<int>&b){
    return a[1]>b[1]; // 降序
});// 其他维度同理

vector结构体比较

自定义函数即可,举个简单的例子

我们希望按照结构体的id排序

struct stu{
    int id;
    int age;
    string name;
};

bool sort_by_id(const stu &s1, const stu &s2){
    return s1.id < s2.id; // 升序
}

保留相同元素相对位置比较

stl库中的sort使用的是快速排序(没记错的话),效率比较高

但是如果两个元素大小相同,可能会在排序的过程中相对顺序发生改变

快速排序是一个不稳定的算法,在经过排序之后,可能会对相同值的元素的相对位置造成改变。

因此,如果想保持相对位置不改变,可以使用stable_sort()

基本用法和sort差不多,具体案例见文档​​​​​​​​​​​​

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值