C++ vector 自定义排序规则(vector<vector<int>>、vector<pair<int,int>>)

2024-03-27 1334阅读

温馨提示:这篇文章已超过400天没有更新,请注意相关的内容是否还可用!

vector

vector vec{1,2,3,4};
//默认从小到大排序  1234
sort(vec.begin(),vec.end());
//从大到小排序 4321
sort(vec.begin(),vec.end(),greater());

二维向量vector>

vector vec{{0,2},{1,5},{1,9},{4,6},{5,9},{8,10}};
//默认优先对第一元素进行从小到大排序,第一元素相同的,按照第二元素从小到大排序
sort(vec.begin(),vec.end()); //[0,2],[1,5],[1,9],[4,6],[5,9],[8,10]

定义cmp函数

1.外部定义

  • 平时的编译器里面自己写的时候 cmp函数前面加不加static都行,但是leetcode刷题时,代码还有实现都是写在类里面的,cmp函数前面一定要加上static修饰。因此建议所有的返回类型都为static bool 类型。
  • 这里不能使用C++11中的auto关键词进行自动类型推导
  • C++ sort函数自定义cmp函数中参数带&符号
    static bool cmp(const vector& v1, const vector& v2){
        //如果第一元素相等,则比较第二元素
        if (v1[0] == v2[0])
            return v1[1]  v2[0];
    }
    vector vec{{0,2},{1,5},{1,9},{4,6},{5,9},{8,10}};
    sort(vec.begin(),vec.end(),cmp);
    //[8,10],[5,9],[4,6],[1,5],[1,9],[0,2]
    

    2.匿名函数Lambda

    vector vec{{0,2},{1,5},{1,9},{4,6},{5,9},{8,10}};
    sort(vec.begin(),vec.end(),[&](const vector &v1, const vector &v2){
        //如果第一元素相等,则比较第二元素
        if (v1[0] == v2[0])
            return v1[1]  v2[0];
    });
    //[8,10],[5,9],[4,6],[1,5],[1,9],[0,2]
    

    可以使用auto

    C++ vector 自定义排序规则(vector<vector<int>>、vector<pair<int,int>>)
    (图片来源网络,侵删)
    sort(vec.begin(),vec.end(),[&](const auto &v1, const auto &v2){
        //如果第一元素相等,则比较第二元素
        if (v1[0] == v2[0])
            return v1[1]  v2[0];
    });
    

    vector<pair<int, int>>

    初始化

    vector vec;
    1. vec.emplace_back(1,2);
    2. 能够直接用map转化
    //unordered_map map;
    vector vec(map.begin(),map.end());
    

    cmp排序

    vector vec;
    vec.emplace_back(0,2);
    vec.emplace_back(1,5);
    vec.emplace_back(1,9);
    vec.emplace_back(4,6);
    vec.emplace_back(5,9);
    vec.emplace_back(8,10);
    //默认按第一元素进行从小到大排序
    sort(vec.begin(),vec.end());
    //[0,2],[1,5],[1,9],[4,6],[5,9],[8,10]
    

    1.外部定义

    static bool cmp(const pair &a, const pair &b) {
        if(b.first == a.first)
            return a.second  b.first;
    }
    sort(vec.begin(),vec.end(),cmp);
    //[8,10],[5,9],[4,6],[1,5],[1,9],[0,2]
    

    2.匿名函数Lambda

    sort(vec.begin(),vec.end(),[&](const pair &a, const pair &b) {
        if(b.first == a.first)
            return a.second  b.first;
    });
    //[8,10],[5,9],[4,6],[1,5],[1,9],[0,2]
    

    这里也可以使用auto关键词,与上面用法一样

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]