栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

vector排序

头文件:#include

示例如下,默认升序

#include 
#include 
#include 
using namespace std;

int main(){
        vectorvec{5,4,6,9,8,1};
        sort(vec.begin(), vec.end());// 默认升序
        for(auto n:vec)
                cout< 

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

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

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

// 方法二:使用自定义函数对象
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;   
});

复杂度-->快速排序

vector多维数组比较

默认按照第一个维度排序

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

这里用lambda表达来实现

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

sort(vec.begin(), vec.end(), [](const vector&a, const vector&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差不多,具体案例见文档​​​​​​​​​​​​

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/511234.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号