Abh*_*wal 3 sorting algorithm runtime-error std c++11
谁能告诉我为什么 std::sort 显示这种意外的行为。
此代码给出运行时错误
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
inline bool compare(string a, string b){
return a.size() <= b.size();
}
int main(){
int n = 100;
string a = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
vector<string>v;
for(int i=0; i<n; i++){
v.push_back(a);
}
sort(v.begin(), v.end(), compare);
}
Run Code Online (Sandbox Code Playgroud)
但是当我替换return a.size() <= b.size();为时return a.size() < b.size();,它工作得很好。
比较函数不满足使用 排序对象的要求std::sort。将其更改为
inline bool compare(string a, string b){
return a.size() < b.size(); // Not <= just <
}
Run Code Online (Sandbox Code Playgroud)
为什么使用不起作用<=?
向量的所有元素都是大小相等的字符串。因此,我们的排序工作几乎与对数字列表进行排序相同。
给定两个数字,std::sort必须判断一个数字是否小于另一个、大于另一个,或者它们相等。
给定n1和n2,
comp(n1, n2)返回true,则n1小于n2。comp(n1, n2)返回false并comp(n2, n1)返回false,则n1等于n2。comp(n1, n2)返回false并comp(n2, n1)返回true,则n1大于n2。<=如果在比较函数中使用comp(n1, n2)returntrue 和 comp(n2, n1)returns true。鉴于此,排序算法根本无法对对象进行排序,并且在尝试这样做时会进入无限递归。
| 归档时间: |
|
| 查看次数: |
565 次 |
| 最近记录: |