在这个代码中,有一个问题是在排序时,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;
    }
};

效果展示

LeetCode---506.相对名次(pair的使用)_职场和发展