【发布时间】:2021-03-24 14:29:57
【问题描述】:
我正在使用 C++ 解决 LeetCode 问题,我想给 std::sort() 一个自定义的 lambda 比较器:
sort(vec.begin(),vec.end(),[](string& a, string& b){
return (a+b < b+a) ? false : true;
});
当我的代码在以下测试用例上进行测试时:
//Edited:Assume this is an array of string, not int
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
编译器给了我以下错误:
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_M_create
然后我查看了其他人的解决方案,发现他们写的三元运算符是:
return a+b > b+a;
以上代码编译正确,没有任何错误。我想知道是否有人可以解释为什么我的原始代码不起作用?
【问题讨论】:
-
@Yunnosch 怎么样?
-
“我想知道是否有人可以解释为什么我的原始代码不起作用?” 如果我们能看到的话,也许我们可以。向我们展示您的minimal reproducible example。
-
您是在对整数或字符串向量进行排序吗?
-
@Shawn 在代码中字面意思是字符串。
-
@AsteroidsWithWings 给定的测试用例是一堆 0,看不到字符串。
标签: c++ string conditional-operator