gpt4 book ai didi

algorithm - c++ std::sort 意外行为(运行时错误)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:00 26 4
gpt4 key购买 nike

谁能告诉我为什么 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);

}

但是当我替换 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 <
}

为什么使用 <=不工作?

向量的所有元素都是大小相等的字符串。因此,我们的排序工作方式几乎与对数字列表进行排序相同。

给定两个数字,std::sort必须弄清楚一个小于另一个、大于另一个还是相等。

给定n1n2 ,

  1. 如果comp(n1, n2)返回 true , 然后 n1小于 n2 .
  2. 如果comp(n1, n2)返回 falsecomp(n2, n1)返回 false , 然后 n1等于n2 .
  3. 如果comp(n1, n2)返回 falsecomp(n2, n1)返回 true , 然后 n1大于 n2 .

如果您使用 <=在比较函数中,comp(n1, n2)返回 true comp(n2, n1)返回 true .鉴于此,排序算法根本无法对您的对象进行排序,并在尝试这样做时进入无限递归。

关于algorithm - c++ std::sort 意外行为(运行时错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50648428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com