對vector<int> 的陣列使用sort排序出錯
阿新 • • 發佈:2021-01-20
刷題時,對於多個vector陣列按照第二個元素的大小進行排序,其實很簡單。
力扣1710. Maximum Units on a Truck
但是一開始程式碼寫的是
class Solution {
public:
static bool cmp(vector &a,vector&b)
{
return a[1]>b[1];
}
int maximumUnits(vector<vector<int>>& box, int n) {
sort (box.begin(),box.end(),cmp);
int ans=0;
for(int i=0;i<box.size();i++){
if(n>=box[i][0]){
ans+=(box[i][0]*box[i][1]);
n-=box[i][0];
}
else{
ans+=(n*box[i][1]);
break;
}
}
return ans;
}
};
執行程式碼時,編譯出錯
Line 3: Char 21: error: use of class template ‘vector’ requires template arguments; argument deduction not allowed in function prototype
static bool cmp(vector &a,vector&b)
但是覺得思路沒錯啊,還查了一會sort對於vector容器的排序,但是基本上都是說的是,使用sort對一個vector排序,並不是涉及到多個vector之間的排序。
結果一看評論區,有個人和我的做法一模一樣。只不過,cmp函式是這麼寫的
static bool cmp(vector<int> &a,vector<int> &b)
{
return a[1]>b[1];
}
我再一看自己的程式碼裡面,只有一個vector,原來是忘了寫vector< int >,因為排序的元素是vector< int > ,雖然規則是哪一個的第一個元素大,誰在前。
總之,這是一個錯誤,粗心錯誤。