为啥升序排序 C++ 不能正常工作?
Posted
技术标签:
【中文标题】为啥升序排序 C++ 不能正常工作?【英文标题】:Why Ascending Sort C++ Cant Work Properly?为什么升序排序 C++ 不能正常工作? 【发布时间】:2020-07-23 09:49:26 【问题描述】:如果要按时间升序排序,源代码中的错误是什么?
结构 pelari char nama[10];int jam,menit,detik,usia,total; 佩拉里拉里[10]
int main() 整数 i,n,j,tmp
cout>n;
for(i=0;i<n;i++)
for(j=i;j<n;j++)
if(lari[i].total>lari[j])
tmp=lari[j].total;
lari[j].total=lari[i].total;
lari[j]=tmp;
【问题讨论】:
如果(lari[i].total>lari[j]) 应该怎么办? “lari”是什么类型? “什么是错误”这是你应该告诉我们的事情。你得到编译器错误吗?运行时错误?输出不正确?请提供minimal reproducible example SO 是为了解决错误,而不是找到错误并解决。因此,您需要找到错误并稍微编辑问题。' 没有任何错误指示但代码不起作用,我想做升序但显示结果时没有任何反应。 【参考方案1】:您应该使用适当的比较器调用std::sort
std::sort(std::begin(lari), std::end(lari), [](auto & lhs, auto & rhs) return lhs.total > rhs.total; );
【讨论】:
【参考方案2】:我认为问题在于您过去比较lari[i].total>lari[j]
的方式;我认为您应该使用lari[i].total>lari[j].total
进行修复。
但是,深入研究,我认为“交换”也存在问题,因为您应该有:
tmp=lari[j].total;
lari[j].total=lari[i].total;
lari[i].total=tmp;
所以,代码变成:
for(i=0;i<n;i++)
for(j=i;j<n;j++)
if(lari[i].total>lari[j].total)
tmp=lari[j].total;
lari[j].total=lari[i].total;
lari[i].total=tmp;
试试这个。再见!
【讨论】:
只需使用std::swap
。重新发明***是在自找麻烦。
但是 std::swap 不能在 iostream 中使用
@ChristianLie 你可以在任何地方使用std::swap
,这是什么意思?以上是关于为啥升序排序 C++ 不能正常工作?的主要内容,如果未能解决你的问题,请参考以下文章