c++二维vector用特定元素排序时sort中cmp的重写

China☆狼群 提交于 2020-01-27 15:12:26

在这里插入图片描述

Method 1:

class Solution {
    public:
    vector<int> filterRestaurants(vector<vector<int>>& restaurants, int veganFriendly, int maxPrice, int maxDistance) {
        int size=restaurants.size();
        vector<vector<int>>res;
        for(int i=0;i<size;i++)
        {
            if((veganFriendly==1&&restaurants[i][2]==0)||restaurants[i][3]>maxPrice||restaurants[i][4]>maxDistance)
            {
                continue;
            }
            res.push_back(restaurants[i]);
        }
        sort(res.begin(),res.end(),[](const auto& a,const auto& b){
            return (a[1]>b[1])||(a[1]==b[1]&&a[0]>b[0]);
        });
        size=res.size();
        vector<int>ans;
        for(int i=0;i<size;i++){
                ans.push_back(res[i][0]);
        }
        return ans;
    }
};

Method 2:

class Solution {
    public:
    static bool cmp(const vector<int>&a,const vector<int>&b){
        return a[1]>b[1]||(a[1]==b[1]&&a[0]>b[0]);
    }
    vector<int> filterRestaurants(vector<vector<int>>& restaurants, int veganFriendly, int maxPrice, int maxDistance) {
        int size=restaurants.size();
        vector<vector<int>>res;
        for(int i=0;i<size;i++)
        {
            if((veganFriendly==1&&restaurants[i][2]==0)||restaurants[i][3]>maxPrice||restaurants[i][4]>maxDistance)
            {
                continue;
            }
            res.push_back(restaurants[i]);
        }
        sort(res.begin(),res.end(),cmp);
        size=res.size();
        vector<int>ans;
        for(int i=0;i<size;i++){
                ans.push_back(res[i][0]);
        }
        return ans;
    }
};

其中,方法1耗时更少,因为少一个调用函数过程

tips:sort为全局函数,其调用的cmp函数需声明为static(静态~=全局)否则报错

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!