class Solution {
public:
static bool cmp(vector<int>a,vector<int>b)
{
return a[]-a[]<b[]-b[];
}
int twoCitySchedCost(vector<vector<int>>& costs) {
int len=costs.size();
sort(costs.begin(),costs.end(),cmp);
int sum=;
for(int i=;i<len/;i++)
{
sum+=costs[i][];
}
for(int i=len/;i<len;i++)
sum+=costs[i][];
return sum; }
};

这个代码,如果cmp函数前不加static,则会报错。因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数。静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,无须创建任何对象实例就可以访问。同时静态成员函数不可以调用类的非静态。所以要加上static关键字

另一个问题,当我想在cmp函数增加一些局部参数时,此时sort函数和cmp函数本身不能再有任何参数,所以可以通过如下的方式进行:

class Solution {
public:
vector<vector<int>> allCellsDistOrder(int R, int C, int r0, int c0) {
vector<vector<int>>a;
int r=,c=;
for (int i = ; i < R; i++) {
for (int j = ; j < C; j++) a.push_back({i, j});
}
sort(a.begin(),a.end(),[r0,c0](vector<int>&a, vector<int>&b){
int l1=abs(a[]-r0)+abs(a[]-c0);
int l2=abs(b[]-r0)+abs(b[]-c0);
return l1<l2;
});
//或写成如下形式
sort(v.begin(), v.end(), [&](vector<int> &a, vector<int> &b)
{
return abs(a[]-r0)+abs(a[]-c0) < abs(b[]-r0)+abs(b[]-c0);
});
return a;
}
};

Leetcode中sort排序遇到的一些问题的更多相关文章

  1. STL中sort排序算法第三个参数_Compare的实现本质

    关于C++ STL vector 中的sort排序算法有三种自定义实现,它们本质上都是返回bool类型,提供给sort函数作为第三个参数. 重载运算符 全局的比较函数 函数对象 我认为从实现方式看,重 ...

  2. 关于js中sort()排序方法

    第一次写这个,算是记录自己的学习前端的一点点的历程吧.今天在做一个图片的随机排序遇到了一个问题,部分截图如下 我用的是json格式存储数组,想通过排序实现img数组中的内容升序或是降序发现用sort自 ...

  3. javascript中sort()排序的一些理解

    sort()方法对一个数组进行排序,并可以接受一个比较函数,最后返回一个排序的数组. 1.sort()有自身默认的比较函数,该函数把排序的元素都看作字符串. var s = [5, 4, 3, 2, ...

  4. Java 8 中Sort排序原理:

    总的来说,java中Arrays.sort使用了两种排序方法,快速排序和优化的合并排序.Collections.sort方法底层就是调用的Arrays.sort方法. 快速排序主要是对那些基本类型数据 ...

  5. js数组中sort排序注意的地方

    var a=[1,2,3,4,5] function sum(a,b) { return a-b } //从小到大 function obj(a,b) { return b-a } //从大到小 a. ...

  6. python中sort排序

    排序并且改变自身结果: nums.sort()

  7. Java中List的sort排序重写

    最近遇到需要使用list中sort排序功能,list中存的是自己写的类,所以需要重写sort函数,一般实现如下: Collections.sort(voList, new Comparator< ...

  8. [LeetCode] 148. Sort List 链表排序

    Sort a linked list in O(n log n) time using constant space complexity. Example 1: Input: 4->2-> ...

  9. 模拟javascript中的sort排序

    一.javascript中sort对数据进行排序的原理 sort() 方法对数组的元素做原地的排序,并返回这个数组. sort 可能不是稳定的.默认按照字符串的Unicode码位点排序; 语法:arr ...

随机推荐

  1. [转]Win2012的 IIS 503 错误

    下载并安装 https://www.microsoft.com/zh-CN/download/details.aspx?id=48145 因为安装了 dotnet-hosting-2.2.3-win. ...

  2. 基于consul高可用

    1.介绍consul Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License ...

  3. 软件推荐----截图软件Snagit

    截图软件,比较推荐使用Snagit,功能上所有截图软件有的他都有.Snagit编辑器有一个[库]功能,可以按日期以及应用程序对截图进行分类整理,最赞的是你可以把整个库备份导出,在新的电脑上进行导入,所 ...

  4. Linux安装python3.6

    Linux安装python3.6  原地址:https://www.cnblogs.com/kimyeee/p/7250560.html Linux下安装Python3.6和第三方库   如果本机安装 ...

  5. android 中activity重启的方法

    private void reLoadActivity(){ Intent intent = new Intent(context, SettingsActivity.class); intent.s ...

  6. Linux下导入CA证书

    在部署路由器的时候,发现路由器不支持从https安装应用,经过调查,发现是路由器里面没导入证书 安装ca-certificates即可解决. opkg install ca-certificates

  7. linux基础命令入门

    1.使用mkdir 创建目录mkdir $HOME/testFolder 2.使用cd命令切换目录cd $HOME/testFolder 3.使用 cd ../ 命令切换到上一级目录cd ../ 4. ...

  8. url编码乱码问题解决

    //url encodeURI加密 window.location.href = "upload.html?sendName="+encodeURI(sendName); //接收 ...

  9. mysql安装密码策略插件

    https://blog.csdn.net/kk185800961/article/details/79447754 注意linux安装密码策略的插件 validate_password.so

  10. python基础1.0

    1. python简介:解释性语言 安装python,注意路径加入path python的解释器,cpython,Python的解释器很多,但使用最广泛的还是CPython.如果要和Java或.Net ...