【问题标题】:How does comparator functions work behind the scene? [duplicate]比较器功能如何在幕后工作? [复制]
【发布时间】:2022-06-16 22:10:21
【问题描述】:

为什么这段代码会出现运行时错误:

在抛出 'std:length_error' 的实例后调用终止 what(): basic_string::_M_create.

将comp函数中的条件更改为s1.size() < s2.size()时给出正确答案。

static bool comp(const string& s1,const string& s2){
    return s1.size()<=s2.size();
}

int main()
{
    int n;
    cin>>n;
    vector<string> words(n);
    for(int i=0;i<n;++i){
        cin>>words[i];
    }
    sort(words.begin(),words.end(),comp);
    for(int i=0;i<n;++i){
        cout<<words[i]<<" ";
    }
    return 0;
}

【问题讨论】:

  • 排序的比较参数必须满足Compare named requirement 在你的情况下它不满足,所以你得到未定义的行为。您的确切错误的可能原因可能是迭代器越过了 end 运算符,因为它依赖于例如事实上,comp 关系是反反身的
  • 将 s1.size()&lt;=s2.size() 更改为 s1.size()&lt;s2.size() 以使您的代码有效。 仅如果第一个参数必须在第二个之前排序,排序比较器必须返回true。您编写了一个比较器,它将声称"AB" 必须在"CD" 之前排序并且"CD" 必须在"AB" 之前排序。这是不可能满足的。

标签: c++ comparator


猜你喜欢
  • 2022-11-04
  • 1970-01-01
  • 2020-11-20
  • 2017-07-29
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
相关资源
最近更新 更多