Sér*_*ros 6 c++ sorting string vector sigabrt
我正在尝试在 C++ 中对字符串数组进行排序,但收到以下错误消息:
抛出“std::logic_error”实例后调用终止 what(): basic_string::_M_construct null 无效
以下程序会导致上一个错误。v有 17 个元素时出现错误,但当元素v较少时一切正常。
有人能指出我有什么问题吗?我正在使用gcc 版本 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
bool comp (string s1, string s2) {
if (s1.size() < s2.size())
return false;
else
return true;
}
int main () {
vector<string> v = { "a", "a", "a", "a",
"a", "a", "a", "a",
"a", "a", "a", "a",
"a", "a", "a", "a",
"a" };
sort(v.begin(), v.end(), comp);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
for*_*818 10
您传递给 sort 的比较器必须满足命名要求 Compare:
与以下属性建立严格的弱排序关系
Run Code Online (Sandbox Code Playgroud)For all a, comp(a,a)==false If comp(a,b)==true then comp(b,a)==false if comp(a,b)==true and comp(b,c)==true then comp(a,c)==true
使用您的比较器:comp(a,a) == true. 由于您没有满足std::sort代码的先决条件,因此具有未定义的行为。