【问题标题】:Trying to sort struct but it isnt working?试图对结构进行排序但它不起作用?
【发布时间】:2021-03-21 06:26:26
【问题描述】:

该函数应该按用户存款中的总金额对用户进行排序,但它无法正常工作,我确信它不是来自变量,因为它仍在显示它需要但未排序的内容,其中我错了吗?

    
    for(int i = 0; i < *br; i++)
    for(int j = 0; j < l[i].numofdep; j++)l[i].total += l[i].dep[j].value;
    
    for(int i = 0; i < *br - 1; i++)
    for(int j = 0; j < *br - 1; j++)
    {
        if(l[j].total > l[j+1].total)
        {
            int in = l[j].no;
            l[j].no = l[j+1].no;
            l[j+1].no = in;
            
            string str = l[j].fname;
            l[j].fname = l[j+1].fname;
            l[j+1].fname = str;
            
            str = l[j].lname;
            l[j].lname = l[j+1].lname;
            l[j+1].lname = str;
            
            in = l[j].numofdep;
            l[j].numofdep = l[j+1].numofdep;
            l[j+1].numofdep = in;
            
            for(int k = 0; k < l[i+1].numofdep; k++)
            {
                in = l[j].dep[k].value;
                l[j].dep[k].value = l[j+1].dep[k].value;
                l[j+1].dep[k].value = in;
                
                str = l[j].dep[k].currency;
                l[j].dep[k].currency = l[j+1].dep[k].currency;
                l[j+1].dep[k].currency = str;
                
                in = l[j].dep[k].dd;
                l[j].dep[k].dd = l[j+1].dep[k].dd;
                l[j+1].dep[k].dd = in;
                
                in = l[j].dep[k].mm;
                l[j].dep[k].mm = l[j+1].dep[k].mm;
                l[j+1].dep[k].mm = in;
                
                in = l[j].dep[k].yy;
                l[j].dep[k].yy = l[j+1].dep[k].yy;
                l[j+1].dep[k].yy = in;
            }
        }
    }

【问题讨论】:

  • ⟼请记住,尤其是在 Stack Overflow 上学习和提问时,尽可能让代码保持井井有条是很重要的。 Consistent indentation 有助于传达结构,更重要的是,有助于传达意图,这有助于我们快速找到问题的根源,而无需花费大量时间尝试解码正在发生的事情。
  • 我没有看到std::sort。目标是实现排序功能,还是只是为了对事物进行排序?
  • 提示:std::swap 而不是所有这些手动变量交换。 95% 的代码甚至不需要存在。如果你实现了一个std::sort 可以处理的比较器,或者你有一个比较函数,那么大部分情况都会消失。
  • 无论l数组包含什么类型的对象,你都应该依赖它的赋值运算符而不是手动交换所有成员。
  • 另外你为什么不使用struct 来保存数据?然后它只是 struct 的单个数组,而不是您必须处理的 5 个(或更多)单独的数组。如果有 15 或 20 个项目与用户关联怎么办?你会写 20 个交换?

标签: c++ sorting struct


【解决方案1】:

如果这是家庭作业,看起来确实如此,并且您还不能使用标准库,请查看here 以获得有关如何编写插入排序的很好的解释。这将解决您的问题,因为我可以从您的代码的一般结构中看出这是您要完成的工作,但是对子数组的索引太多了,除了您的一般情况外,我一目了然地发现出了什么问题循环结构错误。

【讨论】:

  • 看起来不多,但有时最好的答案是“不要浪费时间修复它。把它拿出来重新开始。”
  • @user4581301 或者他没有使用 {};s。大声笑
猜你喜欢
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
  • 2013-11-25
  • 2020-09-04
  • 1970-01-01
相关资源
最近更新 更多