用结构和数组切换结构?

时间:2009-05-18 15:45:17

标签: c++ sorting struct

我之前有一个关于按名称,ID和金额组织输入的问题。现在我已经想出如何让它们井然有序,我需要有3个输出;第一个按名称,第二个按ID,最后一个按金额。我可以使用case和switch语句吗?每当我尝试时,所有三个输出都是名字。

这是我到目前为止所做的:

void GeneralSort(const int SortItem, const int count, CustomerProfile c[])
{   
string tempname;
string tempid;
float tempamount;

for(int iteration = 1; iteration < count; iteration ++)
{
    for(int n = 0; n < (count-iteration); n++)
    {
        if(c[n].CustomerName > c[n+1].CustomerName)
        {
            tempname = c[n].CustomerName;
            c[n].CustomerName = c[n+1].CustomerName;
            c[n+1].CustomerName = tempname;
        }

        if(c[n].CustomerId > c[n+1].CustomerId)
        {
            tempid = c[n].CustomerId;
            c[n].CustomerId = c[n+1].CustomerId;
            c[n+1].CustomerId = tempid;
        }

         if(c[n].AmountDue > c[n+1].AmountDue)
        {
            tempamount = c[n].AmountDue;
            c[n].AmountDue = c[n+1].AmountDue;
            c[n+1].AmountDue = tempamount
        }

如何获取其余的数据,因此它将按ID输出第二个输出,按金额输出第三个输出。我想你可以添加switch语句但是当我累了的时候,所有三个输出都是第一组,这是名字。任何帮助表示赞赏。我不希望任何人为我解决这一切,只是提示我指向正确的方向。

输出示例:

//by name

name    id    amount
able       b2     24
bob     g3     68 
carry   a4     12

//by id
name    id    amount
carry   a4      12
able    b2      24
bob     g3      68

//by amount

name    id     amount 
carry   a4      12
able    b2      24  
bob     g3      68

3 个答案:

答案 0 :(得分:3)

您现在正在使用的功能是混合数据的属性而不是对其进行排序。您应该使用一个标志来区分要排序的列或3个函数sortByName,sortByID和sortByAmout。你的ifs是错的。而不是

if(c[n].CustomerName > c[n+1].CustomerName)
{
   tempname = c[n].CustomerName;
   c[n].CustomerName = c[n+1].CustomerName;
   c[n+1].CustomerName = tempname;
}

它应该说像

CustomerProfile tempItem;

if(c[n].CustomerName > c[n+1].CustomerName)
{
    tempItem = c[n];
    c[n] = c[n+1];
    c[n+1] = tempItem;
}

答案 1 :(得分:0)

您之前的questions接受的答案是使用std :: sort函数。

要做你想做的事,你应该有3种不同的排序功能

  1. sortByName
  2. sortById
  3. sortByAmount
  4. 然后你只需用相关函数

    调用std :: sort
    std::sort(customers.begin(), customers.end(), &sortByName);
    //print your collection here
    std::sort(customers.begin(), customers.end(), &sortById);
    //print your collection here
    std::sort(customers.begin(), customers.end(), &sortByAmount);
    //print your collection here
    

答案 2 :(得分:0)

你应该使用std :: sort来代替编写你自己的排序代码,除非你有一个非常好的理由来自己编写。

在这种情况下,编写自己的内容不太清晰,效率较低,并且包含重复的代码。

编辑:好的,不允许使用排序是一个很好的理由。

在这种情况下,我的建议是尝试将代码重构为函数并尝试使其成为每个函数只做一件事。这样,重复应该变得明显,可以消除。

你发布的代码试图在一个大块中至少做四件事。尝试将排序代码与您排序的内容分开。然后你应该能够分出三种排序方式。