slå strukturer med structs og arrays?

stemmer
0

Jeg hadde en tidligere spørsmålet om organisering av noen innspill på navn, ID, og ​​deretter beløpet. Nå som jeg har funnet ut hvordan å få dem organisert, jeg må ha 3 utganger; den første etter navn, den andre med ID, og ​​den siste av beløpet. kan jeg bruke saken og bytte uttalelser? Hver gang jeg prøvde å, alle tre utganger var ved navn.

Dette er hva jeg har så langt:

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
        }

hvordan får jeg resten av dataene i, så det vil ha den andre produksjonen av ID, og ​​tredje produksjonen av beløpet. Jeg tror du kan legge bryter uttalelser, men når jeg sliten, alle tre utganger var etter det første settet, som er ved navn. noen hjelp er verdsatt. im ikke forventer at noen skal løse alt for meg, bare et tips til å peke meg til riktig retning.

Utgangen eksempel:

//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
Publisert på 18/05/2009 klokken 15:45
kilden bruker
På andre språk...                            


3 svar

stemmer
3

Hva du gjør akkurat nå med din funksjon er å blande attributtene til dataene dine i stedet for å sortere det. Du bør enten bruke et flagg å skille mellom kolonnen for å sortere eller 3 funksjoner sortByName, sortByID og sortByAmout. Og dine ifs er galt. I stedet for

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

det skal si noe sånt

CustomerProfile tempItem;

if(c[n].CustomerName > c[n+1].CustomerName)
{
    tempItem = c[n];
    c[n] = c[n+1];
    c[n+1] = tempItem;
}
Svarte 18/05/2009 kl. 16:12
kilden bruker

stemmer
0

Du bør bruke std :: sort for dette i stedet for å skrive din egen sortering koden med mindre du har en usedvanlig god grunn til å skrive din egen.

Skrive din egen er mindre klart, mindre effektiv og inneholder duplisert kode i dette tilfellet.

Edit: Ok, ikke får lov til å bruke sort er en god grunn.

I så fall er mitt råd forsøk å refactor koden inn funksjoner og prøve å gjøre det slik at hver funksjon gjør bare én ting. På den måten skal duplisering bli tydelig og kan elimineres.

Koden du postet prøver å gjøre minst fire ting i en stor del. Prøv å skille ut sortering koden fra hva du sorterer. Da bør du være i stand til å skille ut hver av de tre måter sortering.

Svarte 18/05/2009 kl. 16:02
kilden bruker

stemmer
0

Dine tidligere spørsmål akseptert svar var å bruke std :: sorteringsfunksjonen.

Til å gjøre hva du vil her du bør ha 3 forskjellige sorter funksjoner

  1. Sorter etter navn
  2. sortById
  3. sortByAmount

Da har du bare ringe std :: liksom med den aktuelle funksjonen

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
Svarte 18/05/2009 kl. 15:59
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more