2017-05-07 5 views
-3

私は大きな問題があります。私はプログラミングの初心者です。私はC++で、ポイントに応じてチームを並べ替えるサッカーリーグランキングのプログラムを作ろうとしています。struct vectorをソートする

誰かがアイデアを助けてくれますか?

名前とポイント数を持つチームの構造を作成しました。

どのようにチームを並べ替えることができますか?私の悪い英語を申し訳ありません。

これは私のコードです:

#include <iostream> 
#include <algorithm> 
using namespace std; 

//I created a struct for the team. 

struct team 
{ 
    char name; 
    int pct; 
}v[20]; 

int main() 
{ int i,sw,aux; 

    for(i=1;i<=4;i++)//read the names 
    { 
     cout<<"Team "<<i<<endl; 
     cin>>v[i].name; 
    } 

    for(i=1;i<=4;i++)//get the points 
    { 
     cout<<"Team "<<v[i].name<<" points"<<endl; 
     cin>>v[i].pct; 
    } 

    //bubble sort(not working) 
    do 
    { 
     sw=0; 
     for(i=1;i<=4;i++) 
     { 
      if(v[i].pct<v[i+1].pct) 
      aux=v[i].pct; 
      v[i].pct=v[i+1].pct; 
      v[i+1].pct=aux; 
      sw=1; 
     } 
    }while(sw==1); 

    for(i=1;i<=4;i++) 
    { 
     cout<<v[i].pct<<endl; 
    } 

    return 0; 
} 
+1

このコードは読むことができません。あなたはそれを自分でやっていますか? – DeiDei

+0

なぜできないのですか?はい。 – Foreastbtch

+0

要素だけでなく要素全体を入れ替える必要があります。また、配列の境界にもっと注意を払う必要があります。 – molbdnilo

答えて

0

あなたはこのようなあなたのソート一部を変更する必要があります。降順でソートしていると仮定します。

do 
{ 
    sw=0; 
    for(i=1;i<4;i++) //< not <= ,because in case of the last element you wont have any other element after it to compare 
    { 
     if(v[i].pct<v[i+1].pct) // use curly brace as you want all 4 following lines to be executed when its true 
     { 
      aux=v[i]; //swap entire struct not just one variable 
      v[i]=v[i+1]; 
      v[i+1]=aux; 
      sw=1; 
     } 
    } 
}while(sw==1); 

また、チームネームの変数タイプを文字列として編集する必要がある場合もあります。

あなたがC++を使用しているとして、あなたはまた、あなたは、単に構造体の内部のコンパレータを書き込み、ソート機能を使用することができます

//#include<algorithm> 
//define comparator function 
bool cmp(team a, team b) 
{ 
    return a.pct < b.pct; 
} 

sort(v+1,v+4+1,cmp); 

をソートするために使用できる1つのライナー機能があります:

struct team 
{ 
    char name; 
    int pct; 

    bool operator<(team other) const 
    { 
     return pct > other.pct; 
    } 
}v[20]; 
sort(v+1,v+4+1); 
は、
+0

ありがとうございます! – Foreastbtch

+0

あなたの歓迎:D –

0

なぜアルゴリズムを含めるのか不思議ですが、それを使用しないでください。あなたはSTLを知っていますか?アルゴリズムを含めるので、スワップ、ソート、コピーなどの単純な関数を知っているかもしれません。彼らは使いやすいです、自分でバブルソートを書くのではなく、1行だけ入力するだけです。ソート機能を使用する前に、これらのチームに対して発注する順序を定義する必要があります。ただ、このように:

bool compareTeams(const Team &t1, const Team &t2) { 
    if (t1.getScore() == t2.getScore()) { 
     return t1.getName() < t2.getName(); 
    } 
    else { 
     return t1.getScore() < t2.getScore(); 
    } 
} 

上記のコードでは、我々はスコアの両方が等しい場合、我々は彼らの名前によってそれらをソートし、最初の我々はスコアでそれらを並べ替え、チームをソートするために検討する方向を定義します。 最後に、STLで既製のsort関数を使用できます。ここで定義した順序を使う​​ことができます。 (私は配列v []はチームを表していると思います。)

+0

私の悪い私は "#を含める"を削除することを忘れてしまった..私はどのようにソート機能が動作するのか知りません。 はい、あなたは正しいです:)。 – Foreastbtch

関連する問題