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

03-27 1328阅读

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购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]