2013-01-13 3 views
0

J'ai un petit problème. J'écris actuellement un code pour la gestion des tournois et je suis sorti avec l'idée que la meilleure façon de garder les équipes en ordre sera une liste. Maintenant, j'essaie de trier la liste Cointaing Team class qui contient des enregistrements de points. est ici la déclaration de classe:C++ Liste de tri contenant la classe

#include "player.h" 
#include <string> 

class Team { 
Player** Gracz; 
std::string Name; 
int TP, STP; 
int Total; 

public: 
Team(); 
Team(Player* gracz1, Player* gracz2, Player* gracz3, Player* gracz4, Player*  gracz5, Player* gracz6, std::string name); 
~Team(); 

void SetTeam(); 
void SetTeam(Player gracz1, Player gracz2, Player gracz3, Player gracz4, Player gracz5, Player gracz6, std::string name); 
void SetTP(int tp); 
void SetSTP(int stp); 

std::string GetTeam(); 
int GetTotal(); 
int GetTP(); 
int GetSTP(); 

bool operator<(Team& team); 
bool operator>(Team& team); 

void PrintTeam(); 
}; 

Et voici le code du programme:

#include <iostream> 
#include "player.h" 
#include "team.h" 
#include <list> 
#include <string> 

using namespace std; 

int main(int argc, char *argv[]) { 
Player *p; 
Team *t1, *t2, *t3, *t4; 
list<Team> x; 
list<Team>::iterator it; 

p=new Player("a","a","a"); 

t1=new Team(p,p,p,p,p,p,"A"); 
t2=new Team(p,p,p,p,p,p,"B"); 
t3=new Team(p,p,p,p,p,p,"C"); 
t4=new Team(p,p,p,p,p,p,"D"); 

x.push_back(*t1); 
x.push_back(*t2); 
x.push_back(*t3); 
x.push_back(*t4); 

cout<<"Turniej: "<<endl; 
for(it=x.begin();it!=x.end();++it) 
    cout<<" "<<(*it).GetTeam(); 
cout<<endl; 

t1->SetTP(15); 
t2->SetTP(4); 
t3->SetTP(8); 
t4->SetTP(8); 
t3->SetSTP(15); 
t4->SetSTP(65); 

x.sort(); 

cout<<"Turniej: "<<endl; 
for(it=x.begin();it!=x.end();++it) 
    cout<<" "<<(*it).GetTeam(); 
cout<<endl; 

return 0; 
} 

J'aimerais trier la liste par tout d'abord TPs puis par SEEE et il est inclus dans la déclaration de l'opérateur surchargé < . Quand j'imprime la liste, j'obtiens A, B, C, D avant le tri et le même après le tri, au lieu de A, D, C, B après. Où est mon erreur?

Merci pour votre aide.

+2

Qu'est-ce que votre fonction 'opérateur <' ressemble? –

Répondre

5

Ici, l'objet est copié, et sa copie est poussé dans un conteneur:

x.push_back(*t1); 
/* the same for others */ 

Ici vous modifiez l'objet original, mais la copie dans le récipient est inchangé:

t1->SetTP(15); 
+0

Merci! Comment je pourrais être si aveugle? – Theoden91