Два кода: один выдает ошибку, а другой — нет. [closed]

Почему я получаю ошибку

terminate called after throwing an instance of 'std::length_error'
  what():  basic_string::_M_create 

при использовании этого кода

bool comp(string a,string b){
    // if(a==b) return false;
    if(a.size()>b.size()) return true;
    else if(a.size()<b.size()) return false;
    else{
        if(a<b) return false;
        else return true;
    }
}

class Solution {
public:
    string kthLargestNumber(vector<string>& nums, int k) {
        nth_element(nums.begin(),nums.begin()+k-1,nums.end(),comp);
        return nums[k-1];
    }
};

тогда как этот код не показывает ошибки

bool comp(string a,string b){
    if(a==b) return false;
    if(a.size()>b.size()) return true;
    else if(a.size()<b.size()) return false;
    else{
        if(a<b) return false;
        else return true;
    }
}

class Solution {
public:
    string kthLargestNumber(vector<string>& nums, int k) {
        nth_element(nums.begin(),nums.begin()+k-1,nums.end(),comp);
        return nums[k-1];
    }
};

делая leetcode вопрос . Единственная разница между ними в том, что я возвращаю истину / ложь. if a==b. Эта проблема не возникает, когда я использую std::sort.

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *