对 C++ 中的 sort() 函数感到困惑

问题描述 投票:0回答:1

我刚刚在 Leetcode 上做了一道题。但我对 C++ 的 sort() 函数感到困惑。

这是有关它的更多详细信息:

给定一个整数数组 nums,根据值的出现频率对数组进行升序排序。如果多个值具有相同的频率,则按降序对它们进行排序。
-输入:数组
-输出:遵循问题规则的排序数组

这是我的代码。

第一个代码片段

class Solution {
public:
    vector<int> frequencySort(vector<int>& nums) {
        std::map<int, int> hm;
        for (int numb : nums)
            hm[numb] ++ ;
        sort(nums.begin(), nums.end(), [&](int a,int b){
            if(hm[a] == hm[b])
                return a > b;
            return hm[a] <  hm[b];
        });
    }
}

第二个代码片段

class Solution {
public:
    vector<int> frequencySort(vector<int>& nums) {
        std::map<int, int> hm;
        for (int numb : nums)
            hm[numb] ++ ;
        sort(nums.begin(), nums.end(), [&](int a,int b){
            if(hm[a] == hm[b])
                return a > b;
            return hm[a] <  hm[b];
        });
        return nums;
        vector<int> arr;
        for(auto &[numb,freq] :  hm){
            while(freq > 0){
                arr.push_back(numb);
                freq--;
            }
        }
        std::sort(arr.begin(), arr.end(), [&](int a, int b){
            if( hm[a] == hm[b])
                return a > b;
            else
                return hm[a] <  hm[b];
        });
        return arr;
    }
};

这是一个例子

-输入:

[1,1,2,2,2,3]

-第一个代码片段的输出:
[3,1,1,2,2,2]

-第二个代码片段的输出:
[3,2,2,2,1,1]

我不明白的是为什么第二个的 sort() 函数似乎不起作用?有人可以帮我说清楚吗?

我尝试了两个具有相同功能的代码片段,但似乎返回了两个不同的结果。

c++ sorting
1个回答
0
投票

两个函数都是错误的。

第一个函数不

return
任何东西,这是未定义的行为

第二个函数

return
太早了,跳过了 1/2 的代码。

编译器应该警告你这两个错误。

© www.soinside.com 2019 - 2024. All rights reserved.