c++ - 二维向量自定义谓词更大功能
问题描述
我有一个像下面这样的二维向量。
vector<vector<int>> vec = {{2,5}, {3, 4}, {0,1}, {1,2}}
我想根据每个 vec[i] 的第二个元素对这个数组进行排序。所以最终结果应该是
{{2,5},{3,4},{1,2}, {0,1}}
我想使用类似的东西
sort(vec.begin(), vec.end(), secondGreater);
bool secondGreater(vector<int> a, vector<int> b){
return a[1]>b[1];
}
我的想法是:vec 的每个元素都是一个一维向量,所以我提供了一个函数来比较两个一维向量。但不知何故,它不起作用。有什么提示吗?
谢谢。
//------------------------------------------------ -
代码如下,错误信息是
第 6 行:字符 46:错误:必须调用非静态成员函数的引用 sort(boxTypes.begin(), boxTypes.end(), secondGreater); ^~~~~~~~~~~~~ 产生1个错误。
class Solution {
public:
int maximumUnits(vector<vector<int>>& boxTypes, int truckSize) {
int cnt=0;
sort(boxTypes.begin(), boxTypes.end(), secondGreater);
for(auto i=0;i<boxTypes.size();i++){
if(truckSize > boxTypes[i][0]){
cnt+= boxTypes[i][0] * boxTypes[i][1];
truckSize -= boxTypes[i][0];
}
else if(truckSize>0 && truckSize < boxTypes[i][0]){
cnt+= boxTypes[i][1] * truckSize;
break;
}
else break;
}
return cnt;
}
bool secondGreater(vector<int> boxA, vector<int> boxB){
return boxA[1] > boxB[1];
}
};
解决方案
secondGreater
是成员函数。但是你试图调用它,就好像它是一个没有关联对象的自由函数。
由于它不访问成员变量,因此它不需要是成员函数,将其移出类:
bool secondGreater(vector<int> boxA, vector<int> boxB){
return boxA[1] > boxB[1];
}
class Solution
如果您出于某种原因需要它在课堂上,您可以将其设为静态:
static bool secondGreater( ...
如果您出于某种原因需要它成为非静态成员函数,也就是您将来需要类中的状态,那么您可以 bind
this
使用它:
sort(boxTypes.begin(), boxTypes.end(), std::bind(secondGreater, this, _1, _2));
// This code is only psuedo code.
或者因为它很简单,只需用 lambda 替换整个内容:
sort(boxTypes.begin(), boxTypes.end(), [](vector<int> boxA, vector<int> boxB){
return boxA[1] > boxB[1];
});
推荐阅读
- python-3.x - 为什么在 `input().split()` 已经是列表时使用`list(map(str,input().split()))`
- glsl - webgl2.0我如何获得除uniformBuffer项目之外的所有制服
- c - 为什么平均计算程序在小数点后显示不同的结果?
- pandas - 基于第二帧的重复行
- c# - 将第二个参数传递给函数
- reactjs - 如何在本机反应中做曲线状动画?
- vuejs2 - 如何在@vue/cli 中添加 tno-unused-vars 错误
- asp.net - 将文件上传到 Azure 存储的 POST 方法 - 返回什么
- node.js - 如何确保请求来自浏览器而不是机器人
- python - 计算每行数据框中的搜索词