在这个代码中,有一个问题是在排序时,sort 函数的第三个参数应该是一个比较函数对象,而不是简单地使用 less(),因为 arr 是一个 vector<pair<int,int>>,每个元素是一个 pair,而不是一个 int,所以 less() 无法直接用于 pair 对象的排序。
sort(arr.begin(),arr.end(),less<int>());
正确的方法是使用一个自定义的比较函数对象或者使用 Lambda 表达式作为排序函数。
示例代码
class Solution {
public:
vector<string> findRelativeRanks(vector<int>& score) {
int len=score.size();
string desc[3]={"Gold Medal", "Silver Medal", "Bronze Medal"};
vector<pair<int,int>> arr;
for(int i=0;i<len;i++){
//第二个i是其在原数组中的位置 把这个元素和其在数组中的位置记录下来
arr.push_back(make_pair(-score[i],i));
}
//arr从大到小排序
sort(arr.begin(),arr.end());
vector<string> ans(len);
for(int i=0;i<len;i++){
if(i>=3){
//arr[i].second表示其在数组中的位置
ans[arr[i].second]=to_string(i+1);
}else{
ans[arr[i].second]=desc[i];
}
}
return ans;
}
};
效果展示